Regex 正则表达式:匹配characterclass,但不是指定的字符串
我正在做一些重大的重构Regex 正则表达式:匹配characterclass,但不是指定的字符串,regex,Regex,我正在做一些重大的重构 [a-z_]*(->|::)[sg]et_source\s*\( 匹配任何类似于 $this->get_source() $foobar->set_source ($x) self::get_source() 现在我想排除一个特定的类,比如说我希望[a-z_]*部分与“foobar”不匹配,例如 []中是否有AND运算符,或者我是否需要一些反向查找 编辑:我没有解析或验证代码,所以这里没有安全问题。这将是一个临时的预提交钩子,用于警告重构后不推荐使
[a-z_]*(->|::)[sg]et_source\s*\(
匹配任何类似于
$this->get_source()
$foobar->set_source ($x)
self::get_source()
现在我想排除一个特定的类,比如说我希望[a-z_]*部分与“foobar”不匹配,例如
[]中是否有AND运算符,或者我是否需要一些反向查找
编辑:我没有解析或验证代码,所以这里没有安全问题。这将是一个临时的预提交钩子,用于警告重构后不推荐使用的方法调用
提前感谢。我个人会建立匹配器组并在代码中处理not条件
([a-z_])*[->|::][sg]et_source\s*\(
然后,用我选择的语言(注意这群人周围的父母):
我总是发现正则表达式更善于表达您想要匹配的内容,而不是您想要排除的内容
但是,如果您的正则表达式引擎支持,您可以查看负面外观。我同意Andrew White的观点,您应该在正则表达式之外执行此操作 顺便说一句,你的正则表达式并不完全正确。将其更改为:
[a-z_]+(?:\->|::)[sg]et_source\s*\(
您可以像这样使用反向查找:
[a-z_]+(?<!foobar)(->|::)[sg]et_source\s*\(
[a-z|]+(?|::)[sg]et_source\s*\(
另请注意,在替换部分,
->|::
,您不应该使用字符类。不,您的意思是(?:->->|::)
。您的表达式与-
、
、
或:
中的任何一个字符匹配。还有[a-z]*
是完全多余的,因为您允许它匹配零次。也许可以去掉*
以强制(至少)匹配一个字符。谢谢,简单明了的回答。
[a-z_]+(?:\->|::)[sg]et_source\s*\(
[a-z_]+(?<!foobar)(->|::)[sg]et_source\s*\(