正则表达式模式在行首不匹配


regex pattern not matching at start of the line

我有这样的模式:

/([^>'"])(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)(未测试(