嗨,我有以下句子,它位于一个更大的字符串变量中:
New Component <b>TEST</b> is successfully registered.
我正在尝试执行正则表达式匹配以在字符串中找到这句话。单词 TEST 是可变的,可以是任何单词。
我在 regexr 中使用以下模式,运行良好:
New Component <b>\w*<\/b> is successfully registered.
在我的java代码中我必须将其写为
Pattern p = Pattern.compile("New Component <b>\\w*<\\/b> is successfully registered.");
Matcher m = p.matcher(result.toString());
if (m.matches()) {
System.out.println("hurray!");
}
这是因为我需要转义反斜杠。然而,该模式在 php 代码中没有收到匹配项,并且没有打印 hurray。反斜杠或我在这里使用它们的方式是否存在导致匹配器失败的问题?
最佳答案
尝试将 .*
添加到模式的开头和结尾:
Pattern p = Pattern.compile(".*New Component <b>\\w*<\\/b> is successfully registered\..*");
您的模式尝试匹配该字符串,但它不会匹配,因为它是较大字符串的一部分,因此目标字符串之前或之后的任何字符都不会被正则表达式接受并导致其失败。
.*
告诉匹配器接受目标字符串前后的 0 个或多个任意字符。
编辑:另外,如果你想匹配行尾的句号,你应该用 \.
转义句号,这是因为点在正则表达式中有特殊的含义,它意味着任何字符。
关于java - 尝试执行正则表达式时可能出现反斜杠转义问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40150389/