2011-10-29 1 views
0

I)は、保護機能_someMethod(」で、すべての「プライベート関数__someMethodを()」置き換えたい。 しかし、私は手つかずの魔法のものを残したいです。 交換はしかし動作しません。にpreg_replaceと複数のNOTと

$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!

私も同じことが、もちろん、次いで(静的呼び出し)" $this->__ "" ::__ "に適用[^construct^destruct^sleep]など

を試みました。

答えて

1

[^...]の構文は無効な文字クラスです。角括弧内のすべては文字のリストに過ぎず、()|は解釈されず、あなたの言葉は文字のリストに入れ替えられます。あなたが使用していた何

は、あなたのpreg_replacingのために働く\w+を続けなければならない。negative assertion (?!....)

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

ました。

+0

なぜw +?おそらくそれは言葉でなければならないからでしょうか? a-zA-Z- – mark

+0

はい。しかし、アサーション自体はゼロ幅のマッチであるためです。 – mario

+0

唯一の問題は、文字列が短くなることです。この場合、\ 1は機能しないようで、結果は "protected function _()"となります。 – mark

関連する問題