与正则表达式的反竞争

时间:2011-01-11 17:50:49

标签: regex pcre

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

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

.*不应与 TaggedObjects 匹配。

感谢您的任何建议。

2 个答案:

答案 0 :(得分: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 :(得分:1)

试试这个。我认为你的意思是如果字符串包含'TaggedObjects'

的出现,你想要使比赛失败
index\.php\?page=(?!.*TaggedObjects).*&tagID=([0-9]+)$