• ベストアンサー

preg_replaceの使い方が分からないのですが

$z=" abcd !00! ouafd \n !00! af \n "; $z=preg_replace("/\s/g",'',$z); $z=preg_replace("/!00!.*$/",'',$z); によってabcdを出そうとしたのですができません どうしたらいいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

No3です。 マニュアルはちゃんとご覧になっていますか? http://phpspot.net/php/man/php/function.preg-replace.html 「後ろにつける」というのはどこでご覧になりましたか?もしくは誰かに教えられたのでしょうか。 最初に見つかった空白を削除したいのなら preg_replace("/\s/" , "" , $z , 1); // preg_replace の第四引数に注目 行頭の空白を削除したいなら preg_rplace("/^\s/" , "" , $z); // 正規表現でマッチさせる と色々パターンがあります。 PHPのマニュアルは他の言語マニュアルの中でも一番易しく書かれていますし、豊富にあります。おっくうにならずに、まずマニュアルで調べてみてください。 なお、正規表現のパターンに関しては http://www2.famille.ne.jp/~akio1998/l_grep.html こちらをご覧ください。

guuman
質問者

お礼

ありがとうございます 読んだつもりがいっぱいあってので読み落としていたみたいです

その他の回答 (3)

回答No.3

こんにちは。 質問内容から推測すると、Perl言語やられてませんでしたか? おっしゃられている /\s/g の 「 g 」は「マッチ演算子」と呼ばれるものです。「 g 」ということなので「マッチするものすべて」という意味で使われたのでしょうが、マッチ演算子の場合は、 g/\s/ が、正しい使い方です。位置が違いますね。 /\s/i のように後ろにつくものを「パターン演算子」といい、 「 i 」をはじめいくつかありますが、「 g 」はありません。 http://php.s3.to/man/pcre.pattern.modifiers.html 上のURLをご参考にしてください。

guuman
質問者

お礼

ありがとうございます gをつけられないのですね gをつけなくても繰り返して変換してくれるのですが1回だけ変換させるには後ろにつけないといけないのでしょうか?

  • BENGAL
  • ベストアンサー率73% (22/30)
回答No.2

$z=" abcd !00! ouafd \n !00! af \n "; $z=preg_replace("[\s]",'',$z); $z=preg_replace("/!00!.*$/",'',$z); で、いかがですか?

guuman
質問者

補足

ありがとうございます $z=" a\nb cd !00! ouafd \n !00! af \n "; $z=preg_replace("/\s/",'',$z); $z=preg_replace("/!00!.*$/",'',$z); で動きました /\s/を/\s/gにしていたためにうまくいかなかったみたいです /\s/にgをつけなくてもPreg_replaceは繰り返し変換してくれるみたいです 逆に/\s/にその意味でgをつけたらoutみたいです どうもpreg_replaceの動作が分からないですね

  • randman
  • ベストアンサー率51% (17/33)
回答No.1

$z=preg_replace("/.+?(abcd).+/s","\\1",$z); てゆーか、抽出する文字列が定まっているんなら、preg_matchでマッチさせた方がいいんじゃない?↑のやり方じゃ、2回以上「abcd」が出現しても対応できないし。

guuman
質問者

補足

ありがとうございます 誤解させてしまいました abcdを抜き出すのではありません スペースや改行やタブ等スペース文字をすべて取り外して 最初の!00!以降を削除したいのです 例えば $z=" x y\nz !00!abcd !00! ouafd \n !00! af \n "; の場合には "xyz" にならなければならないのです

関連するQ&A