2011-01-11 2 views
1

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

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

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

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

+0

TaggedObjects? Это строка не должна совпадать? – Jaskirat

+0

Отрицательный взгляд на кого-нибудь? – delnan

ответ

4

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

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

это может быть просто '(?! TaggedObjects). *' В соответствии с вашей первой точкой. – SilentGhost

+0

@SilentGhost: Нет, повторение находится за пределами группы (чтобы применить негативный взгляд в каждой позиции, которая следует). Альтернатива '(? :(?! TaggedObjects).) *' Будет '(?!. * TaggedObjects). *'. хоть. –

+0

Я не вижу смысла в создании негативного взгляда (?!) Внутри пассивной группы (? :) Потому что отрицательный взгляд не будет захвачен в любом случае. Почему вы помещаете сингл "." внутри пассивной группы? почему нет .*? – Jaskirat

1

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

index\.php\?page=(?!.*TaggedObjects).*&tagID=([0-9]+)$ 
Смежные вопросы