我希望使用正则表达式匹配除字符串之外的任何内容。我做了一些谷歌搜索,发现了这个:^(?:(?!test).)*
做什么?:和?!做?感谢。
答案 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)。)”。不同之处在于,使用被动分组时,不会创建任何后向引用,因此效率更高。