当使用Java正则表达式模式.MatCH()时,源不匹配正则表达式,但是,我的结果是,源匹配正则表达式

When use java regular-expression pattern.matcher(), source does not match regex.But, my hope result is ,source matches regex

当使用Java正则表达式模式.MatCH()时,源不匹配正则表达式,但是,我的结果是,源匹配正则表达式。

  • String source ="ONE.TWO"
  • String regex ="^ONE\\.TWO\\..*"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    import java.util.regex.Pattern;

    public class Test {
        public static void main(String[] args) {
            test();
        }

        public static void test() {
            Test stringDemo = new Test();
            stringDemo.testMatcher();
        }

        public void testMatcher() {
            String source ="ONE.TWO";
            String regex ="^ONE\\.TWo\\..*";
            // The result = false,"not match". But, the hope result is true,"match"
            matcher(source, regex);
        }

        public void matcher(String source, String regex) {
            Pattern pattern = Pattern.compile(regex);

            boolean match = pattern.matcher(source).matches();
            if (match) {
                System.out.println("match");
            } else {
                System.out.println("not match");
            }
        }
    }


嗯,它不匹配有两个原因:

  • 您的regex "^ONE\\.TWo\\..*"不区分大小写,所以您希望TWO如何匹配TWO
  • 而且regex在结尾处需要一个.字符,而字符串"ONE.TWO"没有该字符。

使用以下regex来匹配源字符串:

1
String regex ="^ONE\\.TWO\\.*.*";


在代码中,正则表达式希望TWO中的o为小写,并希望后跟.

尝试:

1
String source ="ONE.TWo.";

这将匹配问题中编码的正则表达式。

表达式\.表示匹配一个文本点(而不是任何字符)。当你把它编码成Java字符串时,你必须用另一个反斜杠来避开反斜杠,因此它变成EDCOX1×4。

表达式末尾的.*表示"匹配任何字符的零或多个(换行符除外)"。

所以这也符合:

1
String source ="ONE.TWo.blah blah";


你的正则表达式有点不正确。这里有一个额外的点:

String regex ="^ONE\.TWO\.(extra dot).*"

试试这个,不带圆点:

String regex ="^ONE\.TWO.*"


默认情况下,模式匹配区分大小写。在您的案例中,source有一个大写的o,regex有一个小写的o。

所以你必须添加Pattern.CASE_INSENSITIVE或改变o的情况。

1
Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE );

1
String regex ="^ONE\\.TWO\\..*";


String regex ="^ONE\\.TWO\\..*"

regex中的双斜线\\是转义序列,以匹配源字符串中的单斜线\

末尾的.*与除换行符以外的任何字符0 or More times匹配。

为了匹配regex,您的源代码应该是

1
2
String source ="ONE\.TWO\three blah @#$ etc" OR
String source ="ONE\.TWO\.123@#$ etc"

基本上,它是以一个.2开头,没有换行符的任何字符串。