匹配字符串不包含带正则表达式的子字符串

时间:2014-07-30 10:06:45

标签: regex substring match negative-lookahead

好的,我知道这是一个经常被问到的问题,但我无法得到我想要的东西。

我正在寻找一个正则表达式,以便找到一个不包含特定子字符串的模式。

我想找到一个不包含b参数的网址。

http://www.website.com/a=789&c=146          > MATCH
http://www.website.com/a=789&b=412&c=146    > NOT MATCH

目前,我有以下正则表达式: \bhttp:\/\/www\.website\.com\/((?!b=[0-9]+).)*\b

但我错误\b,正则表达式匹配字符串的开头,当找到b=时停止,而不是匹配。

请参阅:http://regex101.com/r/fN3zU5/3

有人能帮助我吗?

6 个答案:

答案 0 :(得分:2)

使用它:

^http:\/\/www\.website\.com\/((?!b=[0-9]+)).*$

\ b仅匹配单词结尾。

^匹配字符串的开头和结尾

你甚至不需要那么复杂,如果你不想使用b参数的网址使用这个:

^http:\/\/www\.website\.com\/(?!b).*$

演示:http://regex101.com/r/fN3zU5/5

答案 1 :(得分:2)

只需使用前瞻检查URL后面的任何内容必须是空格或行末。

\bhttp:\/\/www\.website\.com\/(?:(?!b=[0-9]+).)*?\b(?= |$)

DEMO

答案 2 :(得分:1)

你看看这种可能性:

http://regex101.com/r/fN3zU5/6

^http:\/\/www\.website\.com\/[ac\=\d&]*$ 只允许&,=,a,c和数字 组中的完整网址,不应该有“b =”参数

如果您有更多选项,而您不想全部列出它们: 你不允许'b'成为参数的一部分

^http:\/\/www\.website\.com\/[^b]*$

http://regex101.com/r/fN3zU5/7

^http:\/\/www\.website\.com\/(?!.*?b=.*?).*$也适用于此参数字符串的任何位置都允许“b =”,因此您甚至可以将“b”字符串作为参数的值。

请参阅 http://regex101.com/r/fN3zU5/8

答案 3 :(得分:1)

      import re
      pattern=re.compile(r"(?!.*?b=.*).*")
      print pattern.match(x)

如果有" b ="这将展望未来。现在。负向前瞻意味着它与该字符串不匹配。

答案 4 :(得分:0)

这就是你想要的。 ^http:\/\/www\.website\.com\/(([^b]=[0-9]+).)*$

答案 5 :(得分:0)

它的简单模式不灵活但有效:

 http:\/\/www\.website\.com\/+a=+\w+&+c=+\w+
相关问题