【问题标题】:Java String contains a special Char but not even one more CharJava String 包含一个特殊的 Char 但甚至没有一个 Char
【发布时间】:2015-11-26 13:43:24
【问题描述】:

我正在寻找在 html 文档中作为“眼睛”链接的每一个 URL。我正在使用正则表达式模式,因为此时简单的包含不是解决方案。所以我得到了这样的模式

模式::href=\"(https?://)?[a-zA-z0-9?/&=\"+-_\\.# ]*>[Ee]ye

它工作......很好......或多或少......因为我得到的比任何链接为“Eye”或“eye”的 URL 都多。我也会得到链接为“eyebrights”或“eyewears”的 URL,但这不是我想要的。

有什么办法可以说“当我想要的东西超过我的时候,给我这个并忽略它”?

【问题讨论】:

  • 澄清一下,您想要任何文本正好是Eyeeye 的URL? </a>后眼就不能匹配了吗?
  • 嗯...我不确定,但听起来...合乎逻辑。该死的我应该尝试这样的事情。我试试看,谢谢!
  • 应该eye 是链接描述中的第一个单词还是可以放在文本中间,如<a href=...>blue eye</a>
  • eye 应该是第一个词,是的,我尝试了 解决方案并且它有效,但我还有一些情况还不够:) 所以我更喜欢 \b 解决方案:)

标签: java regex equals contain


【解决方案1】:

应该尝试avoid using regex to parse XML/HTML。改用 jsoup 之类的 XML/HTML 解析器。有了这个库,我们的代码可能如下所示:

Elements links = doc.select("a[href]:matches(^[eE]ye\\b)");
//Elements extends ArrayList<Element> so you can easily iterate over it

更多信息http://jsoup.org/cookbook/extracting-data/selector-syntax

【讨论】:

    【解决方案2】:

    eye之后添加\b

    href=\"(https?://)?[a-zA-z0-9?/&=\"+-_\\.# ]*>[Ee]ye\\b
    

    \b:在字边界处断言位置。

    【讨论】:

    • 如果要忽略xxeye,则在[Ee]ye之前添加\\b
    • 谢谢,我试试这个! :)
    猜你喜欢
    • 2020-09-16
    • 2014-01-08
    • 2011-09-15
    • 2011-08-09
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    相关资源
    最近更新 更多