ダブルクオートで囲まれた文字列をマッチさせる際のPHPの癖
ダブルクオートで囲まれた文字列にマッチさせるには、以下の正規表現を使う。
/"([^"\\]|\\.)*"/
しかしこれがこのままではPHPのpreg系関数では使えない。(ereg系のsplitとかでは、/のデリミタを取れば問題なく使えた。)
/"([^"\\\\]|\\\\.)*"/
とするのだ。
PHPのドキュメントを見ると、
http://www.phpmanual.jp/reference.pcre.pattern.syntax.html
注意: シングルクォートあるいはダブルクォートで囲まれた PHP の 文字列 の中では、バックスラッシュは特別な意味を表します。 そのため、正規表現 \\ を使用して \ とマッチさせたい場合は PHP のコード内では "\\\\" あるいは '\\\\' と記述する必要があります。
とあるからなのだ。