2014-07-22 101 views
0

我正在使用online regex tester来测试我的正则表达式。空白的负向预测

我试图做一个正则表达式匹配一个URL(这意味着它开始与http://。不要担心http://s因为我有检查每个单独的数组。http://不会被硬编码。到表达这将是一个变量字符串

因此,这是正则表达式我到目前为止:

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

它应该匹配http://,那么任何字符,直到灾害的表现空白。

例如(灰色是什么亦宜):

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

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

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

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

回答

5

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

~http://\S+~ 

注意:如果使用PHP,你可以使用不同的分隔符,以避免逃逸。而g不是PCRE中的有效修饰符

+0

没有'g'?该网站使用它,它的工作原理。好吧。这工作,我明白了。 –

+0

由于新的分隔符,对于紧凑和易于在眼睛+1 :) – zx81

1

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

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

Live demo

+0

但这匹配整个字符串就像我的。如果您使用我的示例,它也会匹配网址后的单词。 –

+0

你有没有试过第二个。 – Braj

+0

是的,我尝试过他们两个。 –