【发布时间】:2017-12-04 03:25:50
【问题描述】:
当使用java正则表达式pattern.matcher()时,源不匹配正则表达式。但是,我希望结果是,源匹配正则表达式。
String source = "ONE.TWO"String regex = "^ONE\\.TWO\\..*"
【问题讨论】:
-
为什么你的希望是“真的”? ^^ 因为它不能工作的原因有很多,更容易的是'W'不匹配'w'
当使用java正则表达式pattern.matcher()时,源不匹配正则表达式。但是,我希望结果是,源匹配正则表达式。
String source = "ONE.TWO"String regex = "^ONE\\.TWO\\..*"【问题讨论】:
在您的代码中,您的正则表达式期望TWO 中的o 为小写,并期望其后跟.。
试试:
String source = "ONE.TWo.";
这将匹配您在问题中编码的正则表达式。
表达式\. 表示匹配文字点(而不是任何字符)。当你把它编码成一个 Java 字符串时,你必须用另一个反斜杠来转义反斜杠,所以它变成了"\\."。
表达式末尾的.* 表示“匹配零个或多个任意字符(换行符除外)”。
所以这也会匹配:
String source = "ONE.TWo.blah blah";
【讨论】:
String regex = "^ONE\\.TWO\\..*" ,因为它是一个API请求的响应。但是我可以修改我的使用source:boolean match = pattern.matcher(source).matches() || pattern.matcher(source + ".").matches();
模式匹配默认区分大小写。在您的情况下,源有一个大写的 O,而正则表达式有一个小写的 o。
所以你必须添加Pattern.CASE_INSENSITIVE或更改o的大小写
Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE );
或
String regex = "^ONE\\.TWO\\..*";
【讨论】:
String regex = "^ONE\\.TWO\\..*" ,因为它是一个API请求的响应。但是,还是谢谢你。
您的正则表达式有点不正确。你这里多了一个点:
String regex = "^ONE\.TWO\.(extra dot).*"
试试这个,不带点:
String regex = "^ONE\.TWO.*"
【讨论】:
String regex = "^ONE\\.TWO\\..*" ,因为它是一个API请求的响应。但是,还是谢谢你。
它不匹配有两个原因:
"^ONE\\.TWo\\..*" 不区分大小写,那么您如何期望 TWo 匹配 TWO。. 字符结尾,而您的字符串 "ONE.TWO" 没有它。使用以下 Regex 来匹配您的源字符串:
String regex = "^ONE\\.TWO\\.*.*";
【讨论】:
String regex = "^ONE\\.TWO\\..*" ,因为它是一个API请求的响应。但是,还是谢谢你。
String regex = "^ONE\\.TWO\\..*"
正则表达式中的双斜杠\\ 是转义序列,以匹配源字符串中的单斜杠\。
末尾的.* 匹配除换行符之外的任何字符0 or More times。
要匹配正则表达式,您的来源应该像
String source = "ONE\.TWO\three blah @#$ etc" OR
String source = "ONE\.TWO\.123@#$ etc"
基本上是任何以 ONE\.TWO\ 开头且没有换行符的字符串。
【讨论】:
"\\\\.")。 "\." 是无效的 Java 字符串。此代码无法编译。