正则表达式中“?:”做什么?

时间:2011-09-26 01:54:51

标签: regex

我希望使用正则表达式匹配除字符串之外的任何内容。我做了一些谷歌搜索,发现了这个:^(?:(?!test).)* 做什么?:和?!做?感谢。

3 个答案:

答案 0 :(得分:4)

(?:)是非捕获。这意味着匹配像往常一样发生,但括号仅用于分组(在这种情况下,将*运算符附加到整个事物);以后不能用$ 1或\ 1拉出匹配的值。

(?!)是一个负面的先行断言。这意味着如果括号中的字符串不存在,则匹配。

有关更多运营商的信息,请参阅http://docs.python.org/library/re.html。虽然正则表达式在不同语言中有所不同,但它们非常相似。

答案 1 :(得分:0)

是......而(?!)是“零宽度负前瞻断言”。根据“perldoc perlre”。

这意味着与parens中的东西不匹配。来自文档的示例是:

For example "/foo(?!bar)/" matches any occurrence of "foo" that isn’t followed by "bar".

所以在这个例子中,foobar不会匹配,但fooxbar会,foo和foofoo等等。

哦,是的,所以你给出的例子应该匹配任何不包含“test”的东西。我认为在正则表达式评估之外匹配/测试/否定是更清楚的,如“grep -v test”

答案 2 :(得分:0)

?!表示前方的负面看法。如果负向前方内的表达式无法匹配,则包含负前瞻的表达式将仅返回匹配。这意味着“(?!test)。”如果“test”不匹配,则仅返回匹配。

外部分组“(?:(?!test)。)”被称为被动分组,在功能上等同于“((?!test)。)”。不同之处在于,使用被动分组时,不会创建任何后向引用,因此效率更高。

相关问题