Следующее регулярное выражение:
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 - другими словами, он не обязательно должен заканчиваться точкой, поэтому он заставит его заканчиваться везде, где это необходимо, чтобы выражение совпадало. Попробуйте в тестере регулярных выражений, и вы поймете, что я имею в виду.