java - 为什么这个正则表达式在 PHP 中可以正常工作,但在 Java 中却不能?

标签 java php regex

所以我有这个正则表达式

 ^<(.*?)>

这应该与第一个开始标记的内容匹配。 然而,虽然这在 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/

相关文章:

java - 性能调整 weblogic

c# - 有效 URL 字符的正则表达式

匹配 float 的Python正则表达式

regex - 从两行之间的文件中提取一个 block

java - 在 Java 中处理图像的最佳方式

java - 如何处理大型结果集中的数据而不将它们全部加载到内存中?

php - 将用户重定向到我的分页上的最后一页

php - 发生数据库错误 1452

php - CakePHP LDAP/MySQL 混合模型

java - 指令重新排序和发生之前的关系