こんにちは。よろしくお願いします。
以下のようなソースで、
指定した文字列があれば置換、という作業を、
配列をループさせて連続して行いたいと思っているのですが、置換されません。
----------------
$str = "年齢は<--age-->才";
#置換したい文字列の配列
$from[0] = '<--name-->';
$to[0] = 'やまだ';
$from[1] = '<--age-->';
$to[1] = '10';
$from[2] = '<--date-->';
$to[2] = '今日';
#配列分ループして、ヒットしたら置換する
for ($i=0; $i<=2; $i++){
$str=~s/$from[$i]/$to[$i]/go;
}
print $str;
---------------------
結果:年齢は<--age-->才
---------------------
ところが、全く同じ処理をループせずに行うとうまくいきます。
-------------------
$i = 0;
$str=~s/$from[$i]/$to[$i]/go;
$i = 1;
$str=~s/$from[$i]/$to[$i]/go;
$i = 2;
$str=~s/$from[$i]/$to[$i]/go;
print $str;
---------------------
結果:年齢は10才
---------------------
こんな事ってあるのでしょうか?
何か間違いがありましたら教えて下さい
よろしくお願いします
No.3ベストアンサー
- 回答日時:
オプションの o は、パターンのコンパイルを1度しか行わないようにする指定です。
ループだと $i = 0 の時にパターンがコンパイルされ、以降は
$str =~ s/<--name-->/$to[$i]/go;
として実行されてしまうため、2回目以降は成功しません。
ループにしない場合は、それぞれの式でパターンがコンパイルされるので、意図通りに動作したのです。
丁寧なご解説、本当にありがとうございます。
良く理解できました。
「Perlのバグだ!」などと騒いでいたのですが、単に自分の勉強不足でした。恥ずかしい限りです。
No.2
- 回答日時:
----------------
$str = "年齢は<--age-->才";
#置換したい文字列の配列
$from[0] = '<--name-->';
$to[0] = 'やまだ';
$from[1] = '<--age-->';
$to[1] = '10';
$from[2] = '<--date-->';
$to[2] = '今日';
#配列分ループして、ヒットしたら置換する
for ($i=0; $i<=2; $i++){
$str=~s/$from[$i]/$to[$i]/go;
}
print $str;
---------------------
回答ではないですが、↑の部分をそのままコピペして動作確認したらちゃんとできましたよ~。
当方は winXP で確認しました。
何故でしょうねぇ・・
わざわざ試していただいたとのこと、本当にありがとうございます。
原因は下の方が説明して下さった通り、ケアレスミスでした・・お騒がせしまして申し訳ありません。
それにしても、私もXPで動かしているのですが、何故動作結果が違うのでしょうね??不思議です・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- 英語 Implants have a round cross-section, whereas natur 3 2022/10/09 23:09
- SQL Server クエリで、日付が逆転したときは、二日分になるクエリを書きたいです。 4 2022/07/12 22:21
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- TOEFL・TOEIC・英語検定 英検3級のライティングに関して質問があります。 定型パターンを何個か覚えておこうと考え下記を見つけま 6 2022/08/28 06:20
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- 公的扶助・生活保護 保証人? 1 2022/05/17 22:42
- 英語 L-PRF can be obtained by manual or automated metho 1 2022/04/08 09:39
- 戸籍・住民票・身分証明書 今日はJAにブロックしてフラれ 2 2022/05/28 09:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
各項目がダブルクォーテーショ...
-
csvデータのダブルクォーテーシ...
-
正規表現で、特定の文字列を含...
-
VBA 置換文字がみつからない時
-
csvデータ ダブルクォーテ...
-
Excel VBA 教えてください。 VB...
-
ハングルを日本語に置換
-
C言語の質問です、プログラミン...
-
ダブルコーテーション 、"を二...
-
バッチファイルの処理が実際の...
-
スペースで区切られた氏名から...
-
Perl での XML 置換について
-
Excel・ユーザーフォームの情報...
-
文字AAとBBではさまれた不特定...
-
複数のパワーポイントファイル...
-
正規表現 特定の文字列を含む行...
-
パワーポイントの一括置換:複...
-
【Excel VBA】文字列の置換作業...
-
テキストボックスの文字列を置...
-
C言語でテキストファイルの内容...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
csvデータのダブルクォーテーシ...
-
VBA 置換文字がみつからない時
-
csvデータ ダブルクォーテ...
-
各項目がダブルクォーテーショ...
-
正規表現で、特定の文字列を含...
-
スペースで区切られた氏名から...
-
xmlファイル内の文字列置換
-
正規表現 特定の文字列を含む行...
-
○文字目に文字挿入
-
PowerShellでテキストの空白行...
-
EXCEL警告「置換対象のデータが...
-
ハングルを日本語に置換
-
C#で空白行を削除する方法
-
python 大文字小文字を区別しな...
-
EXCELマクロを用いてグラフの系...
-
EXCEL VBA でCTRL+Fのダイア...
-
テキストファイル中の文字列の置換
-
word オートシェイプ内も一括変換
-
Excel・ユーザーフォームの情報...
-
テキストボックスの文字列を置...
おすすめ情報