【问题标题】:java regex pattern to return different group in one text [duplicate]java正则表达式模式在一个文本中返回不同的组[重复]
【发布时间】:2014-06-15 10:33:32
【问题描述】:

我正在尝试将 java 正则表达式应用于以下文本以提取内容,但问题是,当文本中只有一个 href 时,它发现内容很好,但当有更多时,它会转到文本的结尾。这是正则表达式模式:

Pattern pattern = Pattern.compile("\\\"\\>(.*)\\</a\\>\\<br\\>", Pattern.DOTALL);

这是正文:

<div><b>Attachments:</b> <a href="http://projectspace.intranet.group/sites/CFY366N/Lists/Deliverables/Attachments/8/1.JPG">http://projectspace.intranet.group/sites/CFY366N/Lists/Deliverables/Attachments/8/1.JPG</a><br><a href="http://projectspace.intranet.group/sites/CFY366N/Lists/Deliverables/Attachments/8/yinYang.gif">http://projectspace.intranet.group/sites/CFY366N/Lists/Deliverables/Attachments/8/yinYang.gif</a><br><a href=""></a></div>

所以如果只有 1.JPG 的 href,那么它会找到正确的答案:

http://projectspace.intranet.group/sites/CFY366N/Lists/Deliverables/Attachments/8/1.JPG

但是当我添加 yinYang.gif 时,如果找到以下内容:

">http://projectspace.intranet.group/sites/CFY366N/Lists/Deliverables/Attachments/8/1.JPG</a><br><a href="http://projectspace.intranet.group/sites/CFY366N/Lists/Deliverables/Attachments/8/yinYang.gif">http://projectspace.intranet.group/sites/CFY366N/Lists/Deliverables/Attachments/8/yinYang.gif</a><br>

如何更改此设置以查找不同组中&lt;a&gt; ...&lt;/a&gt; 之间的所有值。

【问题讨论】:

    标签: java regex


    【解决方案1】:

    将您的模式更改为非贪婪模式:

    "\\\"\\>(.*?)\\</a\\>\\<br\\>"
    

    但是,有六个警告词是合适的:不要这样做

    您实际上是在尝试使用正则表达式解析(半)结构化信息。经验告诉我们,如果你走这条路,你注定要失败。要么正则表达式最终被证明不足以解决你的问题(想想嵌套结构),要么你会产生不可维护的代码。可能两者兼而有之。

    【讨论】:

    • ...或者更好地使用 HTML 解析器。
    • @Pshemo 你是完全正确的,我已经在编辑解决方案以包含适当的警告。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多