正则表达式匹配没有标签的链接

(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的所有免责声明,如果您想对这个任务使用正则表达式,则可以使用:

$regex="~<a.*?</a>(*SKIP)(*F)|http://\S+~";

交替|匹配的左侧 完成,<a...tags</a>然后故意失败,此后引擎跳到字符串中的下一个位置。右侧与网址匹配,我们知道它们是正确的网址,因为它们与左侧的表达式不匹配。

我在右边放的url regex可以修改,只要使用适合您需要的内容即可。

以上是 正则表达式匹配没有标签的链接 的全部内容, 来源链接: utcz.com/qa/401508.html

回到顶部