【问题标题】:Simple Java regular expression matching fails简单的 Java 正则表达式匹配失败
【发布时间】:2014-04-12 19:58:10
【问题描述】:

在你们因为我发布与以前提出的问题类似的内容而跳起来之前,是的,似乎有许多与正则表达式相关的问题,但似乎没有任何帮助我,或者至少我能看到。

我正在尝试使用 PATTERNMATCHER 解析 JAVA 中的字符串,但我真的不开心。当我使用一些在线正则表达式测试网站时,我的正则表达式似乎与我的输入字符串匹配,但 Java 根本不匹配我的表达式。

我的输入字符串是:

"Big apple" title="Little Apple" type="Container" url="http://malcolm.com/testing"

我用来匹配的正则表达式是".*" title="(.*)" type="Container" url="(.*)"

基本上我想提取第二组和第四组引号内的文本。内部和周围总是会有 4 组带文字的引号。

我编码如下:

变量XMLSubstring 包含上面的字符串(包括引号)并且如前所述,即使我打印出来也是如此。

Pattern p = Pattern.compile(".* title=\"(.*)\" type=\"Container\" url=\"(.*)\"");

m = p.matcher(XMLSubstring);

这似乎不是我正在尝试的火箭科学,但我正在努力调试这该死的东西。

我的正则表达式模式有问题吗? 我使用的代码有问题吗? 我只是个白痴,应该立即停止编码吗?

编辑和更新:我发现了问题。我的字符串末尾有一个空格,它破坏了解析器!多么愚蠢,我认为基于此,我需要接受我的第三个建议并放弃编程。感谢大家的帮助。

【问题讨论】:

  • 另外,您需要使用两个反斜杠 \\ 来转义 Java 正则表达式中的字符。你真的应该从阅读the documentation for Pattern...
  • 感谢 jahroy 的反馈。事实上,我的帖子在所有三个位置都有 .*,但不知何故,当我发布我的问题时,前两个 * 不显示。
  • 我的模式是".*" title="(.*)" type="Container" url="(.*)"
  • 好的。对此我深表歉意……我猜这只是 StackOverflow 的语法引擎。但实际上,那里有很多教程。
  • 评论很中肯,但多年前我在 PERL 中使用了相当多的正则表达式,所以对它们有基本的了解。让我感到震惊的是,各种在线正则表达式测试人员似乎不同意我的正则表达式对输入文本没问题!

标签: java regex matcher


【解决方案1】:

试试这个,

    String str="\"Big apple\" title=\"Little Apple\" type=\"Container\" url=\"http://malcolm.com/testing\"";

    Pattern p=Pattern.compile(".* title=\\\".*\\\" type=\\\"Container\\\" url=\\\".*\\\"");
    Matcher m=p.matcher(str);

【讨论】:

  • 所以你说的问题是他没有转义正则表达式解析器的引号字符?不对; " 在正则表达式中没有特殊含义,因此您只需要一个反斜杠即可使其通过 Java 编译器。添加反斜杠并没有破坏任何东西,但它并没有解决问题。您的正则表达式有效,因为(事实证明)原始正则表达式没问题;是输入被破坏了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 2020-10-15
  • 1970-01-01
相关资源
最近更新 更多