preg_replace和多个NOT

时间:2011-10-29 20:43:26

标签: php regex syntax code-analysis

我想用“protected function _someMethod()”替换所有“private function __someMethod()”。 但我确实想要保持魔术不受影响。 替换不起作用。

$x = array(
    '/\bprivate function __([^(construct|destruct|sleep|wakeup|get|set|call|toString|invoke|set_state|clone|callStatic|isset|unset)])\b/i',
    'protected function _\1'
)

\b\b作为字边界。

它使用preg_replace($x[0], $x[1])

THX!

我也试过[^construct^destruct^sleep]

同样适用于" $this->__ "" ::__ "(静态调用),当然。

1 个答案:

答案 0 :(得分:1)

[^...]语法是否定的字符类。方括号中的所有内容都只是一个字符列表,()|不会被解释,并且您的单词会被拖拽到一个字母列表中。

您想要使用的是negative assertion (?!....)

  '/\bprivate function __(?!construct|destruct|sleep|wakeup|get|set|call|toString|invoke|set_state|clone|callStatic|isset|unset)\w+\b/i',

后面应该\w+为你的preg_replacing工作。