所以我有这个正则表达式
^<(.*?)>
这应该与第一个开始标记的内容匹配。 然而,虽然这在 PHP 中有效,但在 Java 中它匹配第一个 < 和最后一个 > 之间的所有内容。
例如,当它运行时:
<tag1 attr1="val1"><tag2></tag2></tag1>
PHP 匹配:
tag1 attr1="val1"
当 Java 匹配时
tag1 attr1="val1"><tag2></tag2></tag1
最佳答案
String s1="<tag1 attr1=\"val1\"><tag2></tag2></tag1>";
Pattern p = Pattern.compile("^<(.*?)>");
Matcher m = p.matcher(s1);
while(m.find()) {
System.out.println(m.group(1));
}
这是我测试的代码,它返回tag1 attr1="val1"
。
然后,在评论中,您说您正在使用 matches
方法:这就是区别。
虽然 find
方法检查字符串的任何部分是否与正则表达式匹配,但 matches
方法需要整个字符串来匹配给定的正则表达式。
因此,在您的示例中:
while(m.find()) {
System.out.println(m.group(1)); //will print tag1 attr1="val1"
}
if (m.matches()) { //will evaluate the regex as ^<(.*?)>$
System.out.println(m.group(1)); //will print tag1 attr1="val1"><tag2></tag2></tag1
}
关于java - 为什么这个正则表达式在 PHP 中可以正常工作,但在 Java 中却不能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19884505/