当使用Java正则表达式模式.MatCH()时,源不匹配正则表达式,但是,我的结果是,源匹配正则表达式。
String source ="ONE.TWO"
String regex ="^ONE\\.TWO\\..*"
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");
}
}
}
为什么你的希望是"真的"?^^因为它不能工作有很多原因,更容易的是"w"与"w"不匹配。
嗯,它不匹配有两个原因:
您的regex "^ONE\\.TWo\\..*"不区分大小写,所以您希望TWO如何匹配TWO。
而且regex在结尾处需要一个.字符,而字符串"ONE.TWO"没有该字符。
使用以下regex来匹配源字符串:
String regex ="^ONE\\.TWO\\.*.*";
我不能修改String regex ="^ONE\\.TWO\\..*",因为它是对一个api请求的响应。不过,还是要谢谢你。
@维琪,所以你需要调整正则表达式来匹配它。
对。regex list是API响应。这个regex列表对大多数数据都很有用。只有两个regex不有用。我必须为特殊情况编写额外的自定义regex。
在代码中,正则表达式希望TWO中的o为小写,并希望后跟.。
尝试:
String source ="ONE.TWo.";
这将匹配问题中编码的正则表达式。
表达式\.表示匹配一个文本点(而不是任何字符)。当你把它编码成Java字符串时,你必须用另一个反斜杠来避开反斜杠,因此它变成EDCOX1×4。
表达式末尾的.*表示"匹配任何字符的零或多个(换行符除外)"。
所以这也符合:
String source ="ONE.TWo.blah blah";
它对我有用。谢谢,我不能修改String regex ="^ONE\\.TWO\\..*",因为它是对一个api请求的响应。但我可以修改我的使用source:boolean match = pattern.matcher(source).matches() || pattern.matcher(source +".").matches();。
你的正则表达式有点不正确。这里有一个额外的点:
String regex ="^ONE\.TWO\.(extra dot).*"
试试这个,不带圆点:
String regex ="^ONE\.TWO.*"
我不能修改String regex ="^ONE\\.TWO\\..*",因为它是对一个api请求的响应。不过,还是要谢谢你。
默认情况下,模式匹配区分大小写。在您的案例中,source有一个大写的o,regex有一个小写的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\\..*"
regex中的双斜线\\是转义序列,以匹配源字符串中的单斜线\。
末尾的.*与除换行符以外的任何字符0 or More times匹配。
为了匹配regex,您的源代码应该是
String source ="ONE\.TWO\three blah @#$ etc" OR
String source ="ONE\.TWO\.123@#$ etc"
基本上,它是以一个.2开头,没有换行符的任何字符串。
对于Java,反斜杠必须一次逃脱,最后一次用于ReGEXP引擎(如果需要匹配一个点,例如EDCOX1(6))。EDCOX1(7)是一个无效的Java字符串。此代码无法编译。