2010-12-13 3 views
1

imをpreg-replaceでunnessaryの新しい行を削除しようとしましたが、正規表現が正しくありません。誰でも私の正規表現で何が問題なの? (私が持っているのApache/2.0.54 & PHP/PHP関数preg_replaceが正規表現で機能しない、構文の質問

5.2.9が今持っている:

{ 
blaa { 
blow; 
blue}; 
bell;} 
}ball 

はたいと思います:

{blaa {blow;blue};bell;}}ball 

これらの正規表現は、彼らはあまりにも多くのまたはtoolitle削除、いけない仕事? ?

$buffer = preg_replace('#/\}\n|\r|\s/#s', '}', $buffer); 
$buffer = preg_replace('#/\{\n|\r|\s/#s', '{', $buffer); 
$buffer = preg_replace('#/\;\n|\r|\s/#s', ';', $buffer); 

/グラム(グローバル)ブラン内容と、それが何かをdoestnt#なしを提供します。奇妙な! 誰も、なぜこれらの仕事をしないのか何か手がかり?

+1

'\ s'はすでに' \ r'と '\ n'を含んでいます。 – Gumbo

答えて

1

あなたは、{後に空白を削除}、および;、これをしたい場合:

preg_replace('/([{};])\s+/', '$1', $buffer) 

ここ/delimitersあります。 ([{};])は、一致が捕捉されている間に{,}および;の1文字を記述する。 \s+は、次の空白文字(既に\r\nを含む)を記述します。

+0

Gumboにも説明がありがとう!! – Sam

1
$buffer = preg_replace('#([{};])(?:\n|\r|\s)#s', '$1', $buffer); 
+0

ありがとうJoostK !! – Sam

1

これは私の作品:

$buffer = preg_replace('/\}\\n|\\r|\\s/', '', $buffer); 
+0

Thariamaに感謝します! – Sam

+0

OPはすでに一重引用符で囲まれた文字列を使用していたため、バックスラッシュに問題はありませんでした。 (それらを倍加することは実際には何の効果もありません; PHPパーサーは、* regex *パーサーがそれらを見る前にエキストラを削除するだけです) –