与正则表达式的反匹配

CSc*_*ulz 2 regex pcre

我搜索一个正则表达式模式,该模式不应该与组匹配,而是与其他所有内容匹配。
以下正则表达式模式基本上可以工作:

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

但是.*不应与TaggedObjects匹配。

感谢您的任何建议。

Tim*_*ker 5

(?:.*)是不必要的-您无需将任何内容分组,因此.*含义完全相同。但这不是您问题的答案。

要匹配不包含另一个预定义字符串(例如TaggedObjects)的任何字符串,请使用

(?:(?!TaggedObjects).)*
Run Code Online (Sandbox Code Playgroud)

在您的示例中

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

将匹配

index.php?page=blahblah&tagID=1234
Run Code Online (Sandbox Code Playgroud)

并且不匹配

index.php?page=blahTaggedObjectsblah&tagID=1234
Run Code Online (Sandbox Code Playgroud)

如果确实要允许该匹配并且仅排除确切的字符串TaggedObjects,则使用

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