Соответствие регулярному выражению, не содержащее определенного параметра URL

Мне нужно регулярное выражение, чтобы соответствовать всем URL-адресам, который не содержит конкретного параметра URL-адреса, например, если я сделаю исключение =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

Параметр должен быть точно таким же, но, игнорируя случаи, я могу добиться некоторых результатов, используя отрицательный взгляд в будущее, но не могу выполнить требование последнего примера.

Заранее спасибо!

1 ответ

Решение

Попробуй это /^((?!except=yes).)*$/, Обратитесь к этому сообщению для получения дополнительной информации.

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"> 
Другие вопросы по тегам