2016-05-19 3 views
0

мне нужно регулярное выражение, чтобы соответствовать всем URL-адресов, которые не содержат конкретный параметр URL, например, если я , за исключением = да как исключение:Regex соответствия, не содержащий конкретный параметр URL

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 

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

Заранее благодарен!

ответ

0

Попробуйте /^((?!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"> 
+0

Спасибо :) Извините, что я допустил ошибку, последний пример должен быть 'MATCH', поскольку _except_ не полностью равен _yes_ – GreenVine

Смежные вопросы