正規表現を持つ正規表現文字クラス(つまり、角かっこで囲まれたすべてのもの)を見つける必要があります。だから私は次の正規表現を思いついた:
(?<!\\)\[(?:\^\])?(?:[^]\\]+|\\.)*\]
そして、その正規表現は、Notepad ++(検索ウィンドウ(Ctrl-F)とRegEx Helperプラグインの両方)でテストすると完全に正常に機能しますが、PHPコードで使用しようとするとエラーが発生します。
$string = '[^abcd\]efgh]';
$pattern = '/
(?<!\\) \[ # an opening square bracket not preceded by a backslash
(?:\^\])? # circumflex and closing bracket 0 or 1 times
(?:
[^]\\]+ # not a closing bracket, nor a backslash 1-n times
| # or
\\. # any escaped character (including an escaped closing bracket)
)* # 0-n times
\] # closing bracket
/x';
preg_match_all($pattern, $string, $matches);
print_r($matches);
出力:
警告:preg_match_all():コンパイルに失敗しました:21行目のC:... \test.phpのオフセット33にある文字クラスの終了]がありません
私はどこが間違っていますか?