重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

$z=" abcd !00! ouafd \n !00! af \n ";
$z=preg_replace("/\s/g",'',$z);
$z=preg_replace("/!00!.*$/",'',$z);

によってabcdを出そうとしたのですができません
どうしたらいいでしょうか?

A 回答 (4件)

No3です。


マニュアルはちゃんとご覧になっていますか?
http://phpspot.net/php/man/php/function.preg-rep …

「後ろにつける」というのはどこでご覧になりましたか?もしくは誰かに教えられたのでしょうか。

最初に見つかった空白を削除したいのなら
preg_replace("/\s/" , "" , $z , 1); // preg_replace の第四引数に注目

行頭の空白を削除したいなら
preg_rplace("/^\s/" , "" , $z); // 正規表現でマッチさせる

と色々パターンがあります。

PHPのマニュアルは他の言語マニュアルの中でも一番易しく書かれていますし、豊富にあります。おっくうにならずに、まずマニュアルで調べてみてください。

なお、正規表現のパターンに関しては
http://www2.famille.ne.jp/~akio1998/l_grep.html
こちらをご覧ください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/03/25 17:59

こんにちは。


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

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

お礼日時:2005/03/25 08:13

$z=" abcd !00! ouafd \n !00! af \n ";


$z=preg_replace("[\s]",'',$z);
$z=preg_replace("/!00!.*$/",'',$z);

で、いかがですか?

この回答への補足

ありがとうございます

$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の動作が分からないですね

補足日時:2005/03/25 00:25
    • good
    • 0

$z=preg_replace("/.+?(abcd).+/s","\\1",$z);



てゆーか、抽出する文字列が定まっているんなら、preg_matchでマッチさせた方がいいんじゃない?↑のやり方じゃ、2回以上「abcd」が出現しても対応できないし。

この回答への補足

ありがとうございます
誤解させてしまいました
abcdを抜き出すのではありません

スペースや改行やタブ等スペース文字をすべて取り外して
最初の!00!以降を削除したいのです

例えば

$z=" x y\nz !00!abcd !00! ouafd \n !00! af \n ";

の場合には

"xyz"
にならなければならないのです

補足日時:2005/03/24 20:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!