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 |
在代码中,正则表达式希望
尝试:
1 |
这将匹配问题中编码的正则表达式。
表达式
表达式末尾的
所以这也符合:
1 |
你的正则表达式有点不正确。这里有一个额外的点:
试试这个,不带圆点:
默认情况下,模式匹配区分大小写。在您的案例中,source有一个大写的o,regex有一个小写的o。
所以你必须添加
1 | Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE ); |
或
1 |
regex中的双斜线
末尾的
为了匹配regex,您的源代码应该是
基本上,它是以一个.2开头,没有换行符的任何字符串。