我有这样的模式:
/([^>'"])(http|ftp)+(s)?:('/'/)(('w|'.)+)('/)?('S+)?/
当使用此作为主题时:
http://www.google.com <a href="http://www.google.com">http://www.google.com</a> http://www.google.com
它匹配最后一个http://www.google.com
,但不匹配行开头的第一个。我如何才能让它与线路起点的第一个匹配?(并且在锚点标签内继续不匹配(
这是因为[^'">]
表示任何一个字符,而不是''
、"
或>
。在行首的http
之前没有一个字符,这就是它不匹配的原因。
一种可能性(不一定是最好的(是使用类似的东西:
(([^'">])(http))|(^http)
(两种可能的模式之一(。这基本上意味着给我所有您当前指定的以及行开头的"http"。
我毫不怀疑,使用更高级的regex功能,如向前看、向后看或(a(下鲜为人知的秘密查看,有更棘手的方法可以做到这一点,但大多数时候我更喜欢简单。
(a(这个答案中提到的一些功能实际上可能不存在:-(
/(^|[^>'"])(http|ftp)+(s)?:('/'/)(('w|'.)+)('/)?('S+)?/
将为您完成此任务。[]
中的^
将否定其余字符。您必须将^
保持在正则表达式的开头和[]
之外,以匹配行的开头
尝试([^'">])?(http)
(未测试(