Антиматч с Regex - PullRequest
       3

Антиматч с Regex

2 голосов
/ 11 января 2011

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

index\.php\?page=(?:.*)&tagID=([0-9]+)$

Но .* не должен совпадать с TaggedObjects .

Спасибо за любые советы.

Ответы [ 2 ]

5 голосов
/ 11 января 2011

(?:.*) не требуется - вы ничего не группируете, поэтому .* означает абсолютно то же самое. Но это не ответ на ваш вопрос.

Чтобы сопоставить любую строку, которая не содержит другую предопределенную строку (скажем, TaggedObjects), используйте

(?:(?!TaggedObjects).)*

В вашем примере,

index\.php\?page=(?:(?!TaggedObjects).)*&tagID=([0-9]+)$

будет соответствовать

index.php?page=blahblah&tagID=1234

и не будет соответствовать

index.php?page=blahTaggedObjectsblah&tagID=1234

Если вы хотите разрешить это совпадение и исключить только точную строку TaggedObjects, используйте

index\.php\?page=(?!TaggedObjects&tagID=([0-9]+)$).*&tagID=([0-9]+)$
1 голос
/ 11 января 2011

Попробуй это.Я думаю, что вы имеете в виду, что хотите потерпеть неудачу в совпадении, если строка содержит вхождение TaggedObjects

index\.php\?page=(?!.*TaggedObjects).*&tagID=([0-9]+)$
...