【发布时间】:2014-08-30 08:55:40
【问题描述】:
(http([s]?):\/\/?)(([a-zA-Z0-9]+(\.?))+)([a-zA-Z0-9]+((\.[a-zA-Z]{2,5}){1,2})((\/[a-zA-Z0-9\?&=_\-\~:/?#[\]@!\$&'()\*\+,;]*)*)((\.[a-zA-Z]{2,5}){0,2}))
这是我的正则表达式,它可以很好地匹配字符串中的链接。但我不希望它选择每个链接。如果链接前面有">,或者后面有</a>,则不应计算该链接。怎么办?
这些应该匹配:
adasdas http://www.stackoverflow.com asdasas
adasdasahttp://www.stackoverflow.com/something asdas
这些不应匹配:
adasdas<a href="somelink"> http://www.stackoverflow.com </a>asdasas
adasdasa<a href="somelink">http://www.stackoverflow.com/something</a> asdas
我为什么需要这个?:我希望每个链接都可以点击,即使它不在锚标记之间。
【问题讨论】:
-
您能否提供一些正则表达式应该通过和不通过的示例
-
正则表达式不适合 HTML 解析。你应该检查一个 DOM 解析器。 (stackoverflow.com/questions/4330545/php-html-dom-parser)
-
请注意,您缺少一些可在有效 URL 中使用的字符。有关有效字符的更多信息,请参阅this question。
-
@DarkBee 如果解析器在糟糕的 html 上失败怎么办? :)
标签: php regex hyperlink anchor