Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式:匹配characterclass,但不是指定的字符串_Regex - Fatal编程技术网

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*\(