我有这种模式:
/([^>'"])(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
但不匹配该行开头的第一个{{1}}。我怎样才能让它在线的开头与第一个相匹配? (并且在锚标记内继续不匹配)
答案 0 :(得分:1)
这是因为[^'">]
表示不是'
,"
或>
的任何一个字符。在行的开头http
之前没有一个字符,这就是为什么它不匹配。
一种可能性(不一定是最好的)是使用类似的东西:
(([^'">])(http))|(^http)
(两种可能的模式之一)。这基本上意味着在行的开头给我所有你当前指定以及“http”的人。
我不怀疑使用更高级的正则表达式功能,比如前瞻,负面观察或者在(a)之下的鲜为人知的暗中看法,这是很棘手的方法,但是我大多数时候都喜欢简单。
(a)在这个答案中提到的某些功能实际上可能不存在: - )
答案 1 :(得分:1)
/(^|[^>'"])(http|ftp)+(s)?:(\/\/)((\w|\.)+)(\/)?(\S+)?/
会为你做的。 ^
内的[]
会否定其他角色。您必须将^
保留在正则表达式的开头和[]
之外以匹配行的开头
答案 2 :(得分:-1)
尝试([^'">])?(http)
(未经测试)