不包含特定 URL 参数的正则表达式匹配
Regex matching not containing specific URL parameter
我需要一个正则表达式来匹配所有不包含特定 URL 参数的 URL,例如,如果我将 except=yes 作为异常:
www.example.com MATCH
www.example.com/ MATCH
www.example.com/?except=yes NOT MATCH
www.example.com/?test=true&except=yes NOT MATCH
www.example.com/?test=true&except=yes&foo=bar NOT MATCH
www.example.com/foo/bar/?except=yes NOT MATCH
www.example.com/?test=true&except=yesyes&foo=bar MATCH
参数应该完全相同,但忽略大小写,我可以使用负前瞻来达到一些点,但我不能满足上一个例子的要求。
提前致谢!
试试这个 /^((?!except=yes).)*$/
。有关详细信息,请参阅 this post。
2.0.0-p648 :009 > regex = /^((?!except=yes).)*$/
=> /^((?!except=yes).)*$/
2.0.0-p648 :010 > "www.example.com".match regex
=> #<MatchData "www.example.com" 1:"m">
2.0.0-p648 :011 > "www.example.com/".match regex
=> #<MatchData "www.example.com/" 1:"/">
2.0.0-p648 :012 > "www.example.com/?except=yes".match regex
=> nil
2.0.0-p648 :013 > "www.example.com/?test=true&except=yes".match regex
=> nil
2.0.0-p648 :014 > "www.example.com/?test=true&except=yes&foo=bar".match regex
=> nil
2.0.0-p648 :015 > "www.example.com/foo/bar/?except=yes".match regex
=> nil
2.0.0-p648 :016 > "www.example.com/?test=true&except=yesyes&foo=bar".match regex
=> nil
编辑
为了匹配最后一个字符串(其中包含 except=yesyes
),请使用以下正则表达式。 /^((?!except=yes\b).)*$/
唯一不同的是\b
,它匹配单词边界,如空格、标点符号。
> /^((?!except=yes\b).)*$/.match "www.example.com"
=> #<MatchData "www.example.com" 1:"m">
> /^((?!except=yes\b).)*$/.match "www.example.com/"
=> #<MatchData "www.example.com/" 1:"/">
> /^((?!except=yes\b).)*$/.match "www.example.com/?except=yes"
=> nil
> /^((?!except=yes\b).)*$/.match "www.example.com/?test=true&except=yes"
=> nil
> /^((?!except=yes\b).)*$/.match "www.example.com/?test=true&except=yes&foo=bar"
=> nil
> /^((?!except=yes\b).)*$/.match "www.example.com/foo/bar/?except=yes"
=> nil
> /^((?!except=yes\b).)*$/.match "www.example.com/?test=true&except=yesyes&foo=bar"
=> #<MatchData "www.example.com/?test=true&except=yesyes&foo=bar" 1:"r">
我需要一个正则表达式来匹配所有不包含特定 URL 参数的 URL,例如,如果我将 except=yes 作为异常:
www.example.com MATCH
www.example.com/ MATCH
www.example.com/?except=yes NOT MATCH
www.example.com/?test=true&except=yes NOT MATCH
www.example.com/?test=true&except=yes&foo=bar NOT MATCH
www.example.com/foo/bar/?except=yes NOT MATCH
www.example.com/?test=true&except=yesyes&foo=bar MATCH
参数应该完全相同,但忽略大小写,我可以使用负前瞻来达到一些点,但我不能满足上一个例子的要求。
提前致谢!
试试这个 /^((?!except=yes).)*$/
。有关详细信息,请参阅 this post。
2.0.0-p648 :009 > regex = /^((?!except=yes).)*$/
=> /^((?!except=yes).)*$/
2.0.0-p648 :010 > "www.example.com".match regex
=> #<MatchData "www.example.com" 1:"m">
2.0.0-p648 :011 > "www.example.com/".match regex
=> #<MatchData "www.example.com/" 1:"/">
2.0.0-p648 :012 > "www.example.com/?except=yes".match regex
=> nil
2.0.0-p648 :013 > "www.example.com/?test=true&except=yes".match regex
=> nil
2.0.0-p648 :014 > "www.example.com/?test=true&except=yes&foo=bar".match regex
=> nil
2.0.0-p648 :015 > "www.example.com/foo/bar/?except=yes".match regex
=> nil
2.0.0-p648 :016 > "www.example.com/?test=true&except=yesyes&foo=bar".match regex
=> nil
编辑
为了匹配最后一个字符串(其中包含 except=yesyes
),请使用以下正则表达式。 /^((?!except=yes\b).)*$/
唯一不同的是\b
,它匹配单词边界,如空格、标点符号。
> /^((?!except=yes\b).)*$/.match "www.example.com"
=> #<MatchData "www.example.com" 1:"m">
> /^((?!except=yes\b).)*$/.match "www.example.com/"
=> #<MatchData "www.example.com/" 1:"/">
> /^((?!except=yes\b).)*$/.match "www.example.com/?except=yes"
=> nil
> /^((?!except=yes\b).)*$/.match "www.example.com/?test=true&except=yes"
=> nil
> /^((?!except=yes\b).)*$/.match "www.example.com/?test=true&except=yes&foo=bar"
=> nil
> /^((?!except=yes\b).)*$/.match "www.example.com/foo/bar/?except=yes"
=> nil
> /^((?!except=yes\b).)*$/.match "www.example.com/?test=true&except=yesyes&foo=bar"
=> #<MatchData "www.example.com/?test=true&except=yesyes&foo=bar" 1:"r">