2009-06-11 7 views
2

私は正規表現の新人です。単純なケースのように見えますが、苦労しています。"foo-some white space-bar"を "fubar"に置き換える正規表現

"foo bar"を "fubar"に置き換える必要があります。ここでは、fooとbarの間に多少の空白があります。

これは価値があるため、私はこれを達成するためにPHPのeregi_replace()を使用しています。

ご協力いただきありがとうございます。

答えて

8

... =preg_replace('/foo\s+bar/', 'fubar', ...);

+3

ああ、印刷し

$pattern = "foo[[:space:]]+bar"; $replacement = "fubar"; $string = "foo bar"; print ereg_replace($pattern, $replacement, $string); 

、あなたはあまりにも「foobarに」を置換したい場合は、あなたがする必要はあり\ s +の代わりに\ s *を使用してください。 "*"は "0回以上"を意味する( "*"記号はhttp://en.wikipedia.org/wiki/Kleene_starから直接来た)、 "+"は "1つ以上の時間"を意味する。 "\ s"は "任意の空白文字"を表します。平文のエスケープされていない英数字には特別な意味はありません。 – drdaeman

+2

ereg_ *の代わりにpreg_ *(drdaemanが使用したように)を使用することをお勧めします。前者は、現実の標準であり、Web上ではるかによく文書化されているperl互換の正規表現(PCRE)を使用しています。 –

+0

この表現は、私が望んだのとまったく同じように動作します。ありがとうございましたdrdaeman、その他、ヘルプ、および役に立つ追加のコメント。 –

1

私はeregi_replace構文についてはよく分からないが、あなたはこのような何かしたいと思います:れるS \

find = '(foo)\s*(bar)' 
replace = '\\1\\2' 

:これを試してみてください

Pattern: foo\s*bar 
Replace with: fubar 
0

を任意の空白文字のメタ文字。

+1

キャプチャブラッケンの使用例としては良い例ですが、Lasoldo Solsifaは "foo bar"を "foobar"ではなく "fubar"に置き換えたいと考えています。 – drdaeman

0

は、私はまたpreg_replace好むが、完全を期すために、ここではereg_replaceである:「めちゃくちゃ」

+1

実際には、$ pattern = "foo [[:space:]] + bar"; $ replacement = "fubar";さもなければ、うまく "foo baz"を置き換えます。これはおそらく私たちが望むものではありません。 – drdaeman

+0

@drdaeman - ouch!いい視点ね!一定。 – artlung

関連する問題