Антисъвпадение с Regex

Търся модел на регулярен израз, който не трябва да съответства на група, а на всичко останало.
Следният модел на регулярен израз работи основно:

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

Но .* не трябва да съвпада с TaggedObjects.

Благодаря за всякакви съвети.


person CSchulz    schedule 11.01.2011    source източник
comment
Маркирани обекти? Това ли е низът, който не трябва да съвпада?   -  person Jaskirat    schedule 11.01.2011


Отговори (2)


(?:.*) не е необходимо - не групирате нищо, така че .* означава точно същото. Но това не е отговорът на въпроса ви.

За да съпоставите всеки низ, който не съдържа друг предварително дефиниран низ (да речем 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]+)$
person Tim Pietzcker    schedule 11.01.2011
comment
може да е само (?!TaggedObjects).* според първата ви точка. - person SilentGhost; 11.01.2011
comment
@SilentGhost: Не, повторението е извън групата (за да се приложи отрицателният поглед напред във всяка следваща позиция). Алтернатива на (?:(?!TaggedObjects).)* би била (?!.*TaggedObjects).*. все пак. - person Tim Pietzcker; 11.01.2011
comment
Не виждам смисъл в поставянето на отрицателен поглед напред (?!) вътре в пасивна група (?:), тъй като отрицателният поглед напред така или иначе няма да бъде уловен. Защо слагате единичен . вътре в пасивната група? защо не .*? - person Jaskirat; 11.01.2011
comment
@Jass: Вижте предишния ми коментар - той гарантира, че прогнозата се прилага на всяка позиция в мача, а не само в началото. Но (?!.*TaggedExpression) също работи (както писах по-горе). - person Tim Pietzcker; 11.01.2011

Опитайте тази. Мисля, че имате предвид, че искате да провалите съвпадението, ако низът съдържа срещане на „TaggedObjects“

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