【发布时间】:2011-06-07 08:16:20
【问题描述】:
我搜索一个正则表达式模式,它不应该匹配一个组,而是其他所有内容。
以下正则表达式模式基本有效:
index\.php\?page=(?:.*)&tagID=([0-9]+)$
但是.* 不应该匹配TaggedObjects。
感谢您的任何建议。
【问题讨论】:
-
标记对象?那是它不应该匹配的字符串吗?
我搜索一个正则表达式模式,它不应该匹配一个组,而是其他所有内容。
以下正则表达式模式基本有效:
index\.php\?page=(?:.*)&tagID=([0-9]+)$
但是.* 不应该匹配TaggedObjects。
感谢您的任何建议。
【问题讨论】:
试试这个。我认为您的意思是,如果字符串包含出现“TaggedObjects”,则您希望匹配失败
index\.php\?page=(?!.*TaggedObjects).*&tagID=([0-9]+)$
【讨论】:
(?:.*) 是不必要的——你没有对任何东西进行分组,所以.* 的意思完全一样。但这不是您问题的答案。
要匹配任何不包含另一个预定义字符串(比如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]+)$
【讨论】:
(?!TaggedObjects).*。
(?:(?!TaggedObjects).)* 的替代方案是 (?!.*TaggedObjects).*。不过。
(?!.*TaggedExpression) 也有效(正如我在上面写的)。