Regex, чтобы соответствовать всем URL-адресам, кроме определенных URL-адресов - PullRequest
3 голосов
/ 17 февраля 2010

Мне нужно сопоставить все действительные URL, кроме:

http://www.w3.org
http://w3.org/foo
http://www.tempuri.org/foo

Как правило, все URL-адреса, кроме определенных доменов.

Вот что у меня есть:

https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?  

будет соответствовать URL-адресам, достаточно близким к моим потребностям (но ни в коем случае не всем действительным URL-адресам!)

https?://www\.(?!tempuri|w3)\S*

будет соответствовать всем URL с www., но не в домене tempuri или w3.

И я очень хочу

https?://([-\w\.]+)(?!tempuri|w3)\S*

на работу, но на самом деле кажется, что все строки http:// выбраны.

Гах, я должен просто сделать это в чем-то более высоком по иерархии Хомского!

Ответы [ 2 ]

3 голосов
/ 17 февраля 2010

Следующее регулярное выражение:

https?://(?!w3|tempuri)([-\w]*\.)(?!w3|tempuri)\S*

соответствует только первым четырем строкам из следующего отрывка:

https://ok1.url.com
http://ok2.url.com
https://not.ok.tempuri.com
http://not-ok.either.w3.com

http://no1.w3.org
http://no2.w3.org
http://tempuri.bla.com
http://no4.tempuri.bla
http://no3.tempuri.org
http://w3.org/foo
http://www.tempuri.org/foo

Я знаю, о чем вы думаете, и ответ таков: чтобы соответствовать приведенному выше списку и вернуть только первые две строки, вам нужно использовать следующее регулярное выражение:

https?://(?!w3|tempuri)([-\w]*\.)(?!w3|tempuri)([-\w]*\.)(?!w3|tempuri)\S*

, который, по правде говоря, является не чем иным, как небольшой модификацией первого регулярного выражения, где

(?!w3|tempuri)([-\w]*\.)

часть появляется дважды подряд.

Причина, по которой ваше регулярное выражение не работало, заключалась в том, что когда вы включаете. внутри () * тогда это означает, что он может не только соответствовать this. и this.this. , но также this.this.th - другими словами, он не обязательно должен заканчиваться точкой, поэтому он заставит его заканчиваться везде, где это необходимо, чтобы выражение совпадало. Попробуйте в тестере регулярных выражений, и вы поймете, что я имею в виду.

0 голосов
/ 17 февраля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...