空白的否定前瞻

时间:2014-07-22 23:44:56

标签: php regex

我使用online regex tester来测试我的正则表达式。

我尝试制作一个与网址匹配的正则表达式(意味着它必须以http://开头。不要担心http://s,因为我有一个数组,单独检查每个。http://不会被硬编码到表达式中。它将是一个变量字符串。

所以这是我到目前为止的正则表达式:

/http:\/\/.+(?!\s+)/g

它应该匹配http://,然后匹配任何字符,直到它碰到空格。

例如(灰色应该匹配):

http://example.com/foo是我最喜欢的网站,http://192.168.0.1是我的网关IP。

但是,整个字符串与该正则表达式匹配。

负面的前瞻(?!\s+),是我认为我应该关注的。我期待它匹配,直到遇到空白。如果我使用这个否定前瞻:(?!$),它将匹配除行尾的最后一个字符之外的所有内容,如预期的那样。

为什么(?!$)按预期工作,但不是(?!\s+)

2 个答案:

答案 0 :(得分:5)

如果您想要匹配到空格,请使用\S,这意味着任何非空格字符。

~http://\S+~

注意:如果使用PHP,您可以使用不同的分隔符来避免转义。并且g不是PCRE

中的有效修饰符

答案 1 :(得分:1)

您可以使用Positive Lookahead- Zero-Length Assertionsnon-greedy方式。

http:\/\/.+?(?=\s)

Live demo