- ベストアンサー
PHPで正規表現でマッチした値を計算して元の位置に
- PHPで、あるテキストの中から条件にマッチした部分を抽出してその値を計算した物を元の位置に戻す処理が可能でしょうか?
- 具体的には、テキスト中の特定のパターンにマッチする部分を抽出し、その値に2を掛けた結果を元の位置に置き換えたいです。
- ただし、数字部分はランダムなので、決めうちでの単純な文字列置き換えでは対応できません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>「エラーなど一切無視して」というのはどういうことでしょうか? エラー処理など考慮していませんということです。 エラーが出た場合は別途対応が必要です。 >$replacement="'\\1'*2"; 正規表現のパターンマッチでいうとマッチする箇所が まず0番目の要素になりカッコがついている箇所が1番目の要素になります。 $pattern="/\[(\d*?)\]/ue";を例にみれば\\1とは、 1番目の要素=かぎカッコで囲まれた\d*?の箇所=数字の羅列箇所 となり、それに2を掛けているということです。 >どちらの方法の方が処理が早いでしょうか? preg_replace()自体、マッチした箇所を入れ替える処理ですから フロー的にもpreg_replace()でやった方がわかりやすいと思いますよ。
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
エラーなど一切無視しててっとりばやくはe修飾子をつかいます <?PHP /* UTF8でやること */ $str="あいうえおあい[11111111]、かき[22222222]、さしす[33333333]"; $pattern="/\[(\d*?)\]/ue"; $replacement="'\\1'*2"; $str=preg_replace($pattern,$replacement,$str); print $str; ?>
お礼
ご回答ありがとうございます! こんな方法があるのは知りませんでした。 大変勉強になります。 「エラーなど一切無視して」というのはどういうことでしょうか? それともう一箇所わからない部分があるのですが、 $replacement="'\\1'*2"; この行の正規表現の内容がわかりません。何かに2を掛けているのはわかるのですが、その前の部分はどのような意味があるのでしょうか? そして、その後自分でも考えてみたのですが、以下のようにすることでも一応希望の動作はできました。 どちらの方法の方が処理が早いでしょうか? <?php $str="あいうえおあい[11111111]、かき[22222222]、さしす[33333333]"; preg_match_all("/\[(\d*?)\]/",$str,$out,PREG_PATTERN_ORDER); foreach($out[0] as $s) { $t = str_replace(array('[',']'),'',$s); $u = $t*2; $out = str_replace($s,$u,$out); } print $out; ?>
お礼
再度のご回答ありがとうございます。 よく理解できました。 教えていただいた方法でうまくいきました! どうもありがとうございました。