web-dev-qa-db-ja.com

PHP using preg_replace: "区切り文字は英数字またはバックスラッシュであってはなりません"エラー

私は次のようなテキストの文字列を取得しようとしています:

$string = "This (1) is (2) my (3) example (4) text";

かっこ内に正の整数があるすべてのインスタンスでは、それを単に整数自体に置き換えたいと思います。

私が現在使用しているコードは次のとおりです。

$result = preg_replace("\((\d+)\)", "$0", $string);

しかし、私は

区切り文字は、英数字またはバックスラッシュであってはなりません。

警告

何かご意見は?私はここに他の質問があることを知っていますが、その種の質問に答えますが、正規表現に関する私の知識では、この例に切り替えるのに十分ではありません。

35
Christopher

あと少しです。あなたが使用しています:

$result = preg_replace("((\d+))", "$0", $string);
  • 関数のpreg_*ファミリーの最初の引数として指定する正規表現は、区切り文字のペアで区切る必要があります。区切り文字を使用していないため、そのエラーが発生します。
  • ()は、正規表現ではメタ文字であるため、特別な意味があります。リテラルの開き括弧と閉じ括弧を一致させたいので、\を使用してエスケープする必要があります。 \に続くものはすべて文字どおりに扱われます。
  • \d+を使用して整数を正しくキャプチャできます。ただし、キャプチャされた整数は$1ではなく$0になります。 $0は完全に一致します。つまり、括弧内の整数です。

上記のすべての変更を行うと、次のようになります。

$result = preg_replace("#\((\d+)\)#", "$1", $string);
45
codaddict

1)区切り文字が必要です。_/_は正常に機能します。

2)_(_および_)_文字をエスケープする必要があるため、別のグループとは見なされません。

3)また、ここでの置換変数は0ではなく1から始まります(0には括弧が含まれる完全なテキスト一致が含まれます)。

_$result = preg_replace("/\((\d+)\)/", "\\1", $string);
_

このようなものが動作するはずです。さらに質問がある場合は、 PHPのpreg_replace()ドキュメント にアクセスしてください。

7
animuson

ドキュメントを確認してください-パターンの前後に区切り文字を使用する必要があります:"/\((\d+)\)/"

上記の外側の括弧は、ネストされた一致グループではなくリテラルであるため、エスケープすることもできます。

参照: preg_replaceマニュアルページ

2
pix0r

区切り文字は、英数字またはバックスラッシュであってはなりません。、

以下に示すように、「/ .... /」内にパラメータを入力してみてください。そうでない場合、コードは出力します>>>区切り文字は英数字またはバックスラッシュであってはなりません。

$yourString='hi there, good friend';
$dividorString='there';
$someSstring=preg_replace("/$dividorString/",'', $yourString);

echo($someSstring);

// hi, good friend

。 。私のために働いた。

0
Darian Harrison

試してください:

<?php
$string = "This (1) is (2) my (3) example (4) text";
$output = preg_replace('/\((\d)\)/i', '$1', $string);
echo $output;
?>

括弧文字は、正規表現の特殊文字です。それらを使用するには、それらをエスケープする必要があります。

0
Atli