(?:.*)
не требуется - вы ничего не группируете, поэтому .*
означает абсолютно то же самое. Но это не ответ на ваш вопрос.
Чтобы сопоставить любую строку, которая не содержит другую предопределенную строку (скажем, 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]+)$