$text = "今日財布を拾った。";
$value = "100円";
$pattern = "/(今日).*(を拾った。)/";
$replace = sprintf("\\1%s\\2");
$text = preg_replace($pattern, $replace, $text);

のような処理を行ったとき、
うまく$textに結果が格納されません。
$valueの最初の文字が数字で無い場合は
うまくいきますが、"100円"のように数字で
始まっていると、うまくいきません。
良い回避方法は無いでしょうか?

A 回答 (2件)

こんにちわ。



確かに常にスペースが入ってしまいます。(やっぱり指摘されちゃいましたか。←確信犯)

↓こんな方法ではどうでしょう??
$text = "今日財布を拾った。";
$val ="100円";
$value = (string) $val;
$pattern = "/(今日).*(を拾った。)/";
$replace = sprintf("\\1 %2s\\2",$value);
$text = preg_replace($pattern, $replace, $text);
$array = explode(" ",$text);
$text = $array[0].$array[1];

なんだか邪道のような気もするんですが、とりあえずうまくいきます。(例によって自信なし)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

$textにスペースが入っていなければ
それでいいと思うのですが、
$textにスペースが入っているとだめですよね。
せっかく回答してもらって申し訳ないんですが。

一応、自分のやりたかったことは、
テキストファイル
hoge = "foo"
bar = "aaa"

END

のfooの部分を置換したかったので
$text = 「テキストファイルの中身」
$val = "999";
$pattern = "/(hoge = \").*?(\".*END)/ms";
$replace = sprintf("\\1%s\\2", $val);
$text = preg_replace($pattern, $replace, $text);
の$patternと$replaceを
$pattern = "/(hoge = )\".*?\"(.*END)/ms";
$replace = sprintf("\\1\"%s\"\\2", $val);
とすることで解決しました。

お礼日時:2001/08/25 19:41

こんばんわ。


ちょっと試してみました。

>$replace = sprintf("\\1%s\\2");

ここは$replace = sprintf("\\1 %s\\2");の様に\1と%sの間にスペースを1個入れてやるとうまくいくようです。

ところで、$replace = sprintf("\\1 %2s\\2",$value);の間違いでは??(PHP初心者なので全然自信なし)

この回答への補足

>$replace = sprintf("\\1%s\\2");
は、
$replace = sprintf("\\1%s\\2", $value);
の間違いです。

たしかに、\\1と%sの間にスペースを入れれば
うまくいきますが、出力される文章にも、
スペースが入っちゃうんですよね。。。

補足日時:2001/08/25 08:52
    • good
    • 0

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q$str=preg_replace('/\u3000/','  ',$str);

によってutf-8の空白文字をhtmlの空白文字に変換しようとしたのですがエラーになります
どうしたらいいのでしょうか?

Aベストアンサー

>そもそも?のところにコード表現で空白文字を入力する手段はないのでしょうか?
\xE3\x80\x80
で一応いいかと思いますが…

Qforeach($stock as $name => $value){ の$value)で値用の変数

<!DOCTYPE html>
<html>
<head>
<title>P161 Sample6-7 array()を使う</title>
</head>
<body>

<?php

$stock = array("みかん"=>80,"いちご"=>60,"りんご"=>22, "もも"=>50,"くり"=>57);

?>

<table border="2">
<tr bgcolor="#AAAAAA">
<th>番号</th>
<th>個数</th>
</tr>

<?php

foreach($stock as $name => $value){
print "<tr><td>{$name}</td><td>{$value}個</td></tr>\n";
}

?>

</table>

</body>
</html>
以上の foreach($stock as $name => $value){ 
 のforeach文は特殊な繰り返し文で$stockは”変数名”・$name"はキー(引出し)用の変数・
 ここまでは何となく意味がわかります。最後のは$valueは”値用の変数”・・とあります。
 ここで言う、”値用の変数”の値とは何のことなのでしょうか? 
 よろしくお願いいたします。

<!DOCTYPE html>
<html>
<head>
<title>P161 Sample6-7 array()を使う</title>
</head>
<body>

<?php

$stock = array("みかん"=>80,"いちご"=>60,"りんご"=>22, "もも"=>50,"くり"=>57);

?>

<table border="2">
<tr bgcolor="#AAAAAA">
<th>番号</th>
<th>個数</th>
</tr>

<?php

foreach($stock as $name => $value){
print "<tr><td>{$name}</td><td>{$value}個</td></tr>\n";
}

?>

</table>

</body>
</html>
以上の foreach($stock as $name => $value){ 
 のfor...続きを読む

Aベストアンサー

$name には、"みかん"、"いちご" など。$valueには、80や60が入ります。

> $stock = array("みかん"=>80,"いちご"=>60,"りんご"=>22, "もも"=>50,"くり"=>57);

の => という記号と対応しているでしょ?

Q@$a = $b["c"] or $a = "text"; という記述の仕方

これは $a = b["c"] がエラーだったら$aに"text"を代入できるので楽なんですが、
あまり使わない方がいい構文なのでしょうか?

配列の存在チェックをしていて
if(isset($b["c"])){
$a = $b["c"];
}else{
$a = "text";
}
こちらの方がいいのでしょうか?
or の使い方が検索してもイマイチ分からないのです

@はエラーが発生しているのに、それを表示しない方法だと認識しています
だからエラーを出さないのが正しい記述なのであれば、後者が正しいのかと思ったり
1行で収まる上に、一応構文として理解も難しくないので問題ないのかなと思ったり

タイトルの記述方法が不適切なのかどうかと、orの適切な使い方、@はあまり使わない方がいいのかを教えてください
本やネットで検索してみたのですが、どうしてもヒットしません
検索で分かるのでしたら、どのような検索の仕方がいいか教えてください!
お願いします。

Aベストアンサー

@$a = $b["c"] or $a = "text";

if(isset($b["c"])){
$a = $b["c"];
}else{
$a = "text";
}
では$b["c"] = 0の時の動作が違いますね
上の式と同じにするなら
if(isset($b["c"]) and $b["c"]){
または
if(!empty($b["c"])){
になると思います
@は自分も関数の頭に使うことはたまにあります。使わない方がいいとは思いません。

@がないと$b["c"]が未定義の場合にNoticeエラーとなります。

Qループ forに関して for($i = $num ; $i < $max ; $i++)

phpの初心者です。

以下の記述ですが、上手にループしてくれません。

for($i = $num ; $i < $max ; $i++)

$num の部分に「0」を入れると稼動するのですが、変数を代入したいというのが希望です。

方法があったらご教授下さい。

Aベストアンサー

もう一度全体のコードを見直してみてください。
問題なく動作します。

$num = 1;
$max = 5;

for($i = $num ; $i < $max ; $i++){
echo $i."<br />";
}

Q$str=mb_ereg_replace('goo','グッド',$str);

によって
$strの中の'good'を'グッド'に変更したいのですが
'good'は大文字と小文字を区別しないようにしたいのですがどうしたらいいでしょうか?
例えば
'goOd'も'グッド'にしたいのです。
PHPマニュアルには詳しい使い方が載っていないので困っています。

Aベストアンサー

大文字小文字を無視するなら
mb_eregi_replace
では?

参考URL:http://jp2.php.net/manual/ja/function.mb-eregi-replace.php


このカテゴリの人気Q&Aランキング

おすすめ情報