PHPにおけるバックスラッシュの問題
バックスラッシュはPHPの特殊文字です。 これは、文字列内でスラッシュがそれ自体を表すようにしたい場合、 それを倍にする必要があることを意味します:
<?php
$str = '\\ \\\\ \\\\\\'; // 実際の文字列は '\ \\ \\\'
?>
バックスラッシュはまた、正規表現の特殊文字でもあります。 これは、正規表現内でスラッシュがそれ自体を表すようにするには、 それをなんと4回書く必要があることを意味します:
<?php
echo preg_replace('#\\\\#', '!', '\\ \\\\ \\\\\\'); // '! ! !!'を出力
?>
では、検索パターンがバックスラッシュが1回以上という正規表現を書いてみましょう。
その場合、グループ化なしでその前の4文字に対して演算子+を書きます:
<?php
echo preg_replace('#\\\\+#', '!', '\\ \\\\ \\\\\\'); // '! ! !'を出力
?>
次の文字列が与えられています:
<?php
$str = 'a\\b c\\d e\\f';
?>
この文字列で、文字、バックスラッシュ、文字というパターンに一致するすべての部分文字列を見つけてください。
次の文字列が与えられています:
<?php
$str = 'a\\b c\\\\d e\\\\\\f';
?>
この文字列で、文字、バックスラッシュが任意の回数、文字というパターンに一致するすべての部分文字列を見つけてください。