正则表达式匹配没有标签的链接
(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 asdasasadasdasahttp://www.stackoverflow.com/something asdas
这些不应该匹配:
adasdas<a href="somelink"> http://www.stackoverflow.com </a>asdasasadasdasa<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