人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPの正規表現について次の質問にご回答ください。

$u = array('Yamaguchi-ken(中略)','Saitama-ken(中略)','Aichi-ken(中略)');

これらから「-ken」を置換してなくすという意図で、
$hoge = str_replace('-ken', '', $u);
という処理をしていました。

そこに「Saitama」で始まるキーワードに限り、最後尾に「1banchi」を追加する、
つまり、「'Saitama-ken(中略)'」を「'Saitama-ken(中略)1banchi'」という処理が必要になりました。
この場合「-ken」に対する処理はあってもなくてもいいとします。
そこで次の質問にご回答ください。

質問?
str_replaceで正規表現は使えないですよね?
単に確認の質問ですのでYES、NOでご回答ください。
また最初の一人にご回答いただければ他の方はご回答いただかなくて結構です。

質問?
「Saitama」で始まるキーワードに限りpreg_replaceで処理し、
それ以外の場合はstr_replaceで処理するというやり方が良いのか、
全部をpreg_replaceで処理したほうが良いのか、
あるいは他にもっと良いやり方があるのか知りたいです。
実際に動くスクリプトを用いてご解説ください。

Vista,PHP5,XAMPP,Firefoxという環境でやっています。
以上、よろしくお願いします。

●質問者: taroemon
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:aichi firefox hoge ken PHP
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● goodvn
●35ポイント

質問(1)について

YES が can か cannot のどちらをさしているか分かりませんが,cannot です.できません

http://jp.php.net/manual/ja/function.str-replace.php


質問(2)について

PHP の正規表現より,Perl互換正規表現のほうが,速度の点でも,可読性の点でも,拡張性の点でも優れているので,preg_replace がよいと思います

$u = preg_replace('/-ken/', '', $u);
$u = preg_replace('/^(Saitama.*)$/', '$1 1banchi', $u);

これでどうですか?

◎質問者からの返答

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


質問(1)の疑問が解消されました。


質問(2)のご回答についてですが、

処理すべきデータが数千件ある場合、ifで場合わけした方が早いのではないでしょうか?

もしifを使った方が良い場合、「Saitama」で始まるならというifの条件処理の仕方がわかりません。

それともこれはこのままでよいのでしょうか?


私の質問の説明不足で申し訳ありません。引き続きご回答をお待ちします。


2 ● kn1967
●35ポイント

goodvn氏の回答を一部おかりしますと・・・

$u = str_replace('/-ken/', '', $u);
$u = preg_replace('/^(Saitama.*)$/', '$1 1banchi', $u);

上記のように変更することは可能です。


Saitamaが含まれているかどうかという判定は

preg_replaceの正規表現の部分で行っているのですから

これとは別にIF文判定などを行う事は二度手間というか

何のために正規表現を使っているのかという話になります。

◎質問者からの返答

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


>何のために正規表現を使っているのかという話になります。

そうですか。よく知らないで質問しました。すみません。

でも正規表現に関して新しい知識ができてよかったです。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ