(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+~";
See the demo http://regex101.com/r/gY7rO4/6.
这个问题是这个问题中解释的技术的一个经典案例“正则表达式-匹配模式,排除...” https://stackoverflow.com/q/23589174/
左侧交替|
比赛完成<a ...tags </a>
然后故意失败,之后引擎跳到字符串中的下一个位置。右侧与 url 匹配,我们知道它们是正确的,因为它们与左侧的表达式不匹配。
我放在右侧的 url 正则表达式可以进行改进,只需使用适合您需要的任何内容即可。
参考
- 如何匹配(或替换)除 s1、s2、s3... 情况之外的模式 https://stackoverflow.com/q/23589174/
- 关于匹配模式的文章,除非... http://www.rexegg.com/regex-best-trick.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)