私は以下のテキストを持っていますが、私は\'
を取り除こうとしています。望ましい出力は"Gigi DAgostino"
です。preg_replaceを使ったバックスラッシュの置換
"Gigi D\'Agostino"
私はpreg_replace
でバックスラッシュを置き換えに関するいくつかの他の質問をチェックし、私はそれをエスケープ倍にする必要があることを学びました。だから私はいくつかの実験をしました。
echo preg_replace("/\\\/", "", "Gigi D\'Agostino"); // Gigi D'Agostino
echo preg_replace("/'/", "", "Gigi D\'Agostino"); // Gigi D\Agostino
echo preg_replace("/\\\\'/", "", "Gigi D\'Agostino"); // Gigi DAgostino
これまでのところ、とても良いです。これらは意味をなさない。しかし、私の実際のコードでは、パターンの一重引用符を使用しました。
echo preg_replace('/\\\/', "", "Gigi D\'Agostino"); // Gigi D'Agostino
echo preg_replace('/\'/', "", "Gigi D\'Agostino"); // Gigi D\Agostino
echo preg_replace('/\\\\\'/', "", "Gigi D\'Agostino"); // Gigi DAgostino
また、最初の2つの意味があります。私は3番目を手に入れません。なぜ余分なスラッシュが必要ですか?
'/ (\\)->\ (\)->' /'
^ ^
| |
these two this one
escape the escapes
next \ the following '
エクストラ(5 番目)\
の役割は何ですか?
私は正規表現についてよく知らないので、ここでは本当に簡単なことがあります。
PS:私はバックスラッシュを置き換える方法を探していません。上記の例はすでにそうしています。私はそれがしている方法を理解しようとしています。
$str = "Gigi D\'Agostino";
# \ escapes '
echo preg_replace('/\'/', "", $str) . PHP_EOL; # "Gigi D\Agostino"
# can't escape \ with a single \. it requires two \
echo preg_replace('/\\/', "", $str) . PHP_EOL; # No ending delimiter '/' found
# \\ escapes the third \
echo preg_replace('/\\\/', "", $str) . PHP_EOL; # "Gigi D'Agostino"
# now we combine the patterns. we replace \'
# we need to escape both \ and '
# double backslashes to escape \, and a single backslash to escape '
# makes four backslashes and an apos: \\\ \'
# but ofc, this doesn't work. requires an additional \
echo preg_replace('/\\\\\'/', "", $str) . PHP_EOL; # "Gigi DAgostino"
http://php.net/manual/en/function.stripslashes.phpを使用しない理由は何ですか? – chris85
単一引用符で囲まれた文字列では、バックスラッシュ*がエスケープします。*と一重引用符。 PCREはエスケープされたバックスラッシュを必要とします。文字列を単に 'print'して、トークン化された実際の文字列値を確認します。 – mario
@ chris85また、私は2D配列[パターン、代替]で保持している他の文字を取り除く/置き換えています。それに、私は物事の底に行きたい。 – akinuri