2008-09-10 8 views
2

アルファベット文字の後ろに1つ以上の空白文字(タブおよび/またはスペース)が続き、その後に1つ以上の数字が続き、アルファベット文字の後にカンマが続き、セミコロンセミコロンを入力します。私は例を提供しますこのPHP正規表現で何が問題になっていますか?

スタート:

hello world  1007; 

終了:

hello world,1007; 

答えて

6

開始と終了の2つの|は、間違っている可能性があります。また、両方ともスラッシュでなければなりません。

他のすべてのスラッシュは、バックスラッシュである必要があります(エスケープする必要があります)。

PHP 4.04 $nはキャプチャグループを参照するのに適した方法です。

$output = preg_replace("/(\\D)\\s+(\\d+;)/", "$1,$2", $output); 

あなたは、単一引用符を使用する場合は、あなたのバックスラッシュをエスケープする必要はありません。

$output = preg_replace('/(\D)\s+(\d+;)/', '$1,$2', $output); 
+3

私が正しくリコール場合は、[スタートとエンドのパターンの記号(「|」s)はPHPで必要とされていますpreg_ *関数。 –

+0

良い点 - 私はバックスラッシュをエスケープすることも忘れていました。 – samjudson

3

それらのフォワードスラッシュはバックスラッシュべきか?二重引用符を一重引用符に変更しない限り、PHPのためにエスケープする必要があります。

1

あなたは正規表現ではなく、スラッシュでバックスラッシュをしたいです。が必要です開始と終了のパイプ(または正規表現のための別の区切り文字)

$x = "hello world  1007;";  
echo preg_replace('|(\D)(\s+)(\d+)(;)|','$1,$3',$x); 
echo preg_replace('/(\D)(\s+)(\d+)(;)/','$1,$3',$x); 
echo preg_replace('{(\D)(\s+)(\d+)(;)}','$1,$3',$x); 
+0

開始区切り文字と終了区切り文字に何かを使用できるかどうかは分かりませんでした。 – samjudson

関連する問題