(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>之后,则不应对该链接进行数学计算。怎么做到呢?
">
</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>然后故意失败,此后引擎跳到字符串中的下一个位置。右侧与网址匹配,我们知道它们是正确的网址,因为它们与左侧的表达式不匹配。
|
<a...tags</a>
我在右边放的url regex可以修改,只要使用适合您需要的内容即可。