- ベストアンサー
mb_ereg_replace関数の正規表現
PHPでmb_ereg_replace関数を使って、任意の文字列から文字列"あい"でない文字を抽出したいと考えております。 その際に、[^あい]と記述すると、"あ"又は"い"でない文字を抽出することになり目的を果たせません。 就いては、ブラケット内で文字列を扱う方法の有無および、あるのであればその方法、ないのであればその代替案をご教示いただきたくお願い申し上げます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
pregで厳密に行う場合はu修飾子をつけてください <?PHP mb_internal_encoding("UTF8"); $abc="a、b、cなど。"; $aiu="あ、い、うなど。"; $pattern="/(^[^な]+).+/u"; $replacement="$1"; print preg_replace($pattern,$replacement,$abc)."<br>"; print preg_replace($pattern,$replacement,$aiu)."<br>"; ?>
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
ereg系の関数は戻り読みができなかったかもしれません preg_replaceではどうでしょう? (日本語処理を正確にするにはUTF8しばりになりますが) <?PHP $pattern="/a(?!i)|(?<!a)i|[^ai]/"; $replacement="_"; $array=array("xaiy","aau","aiu","ai","a","aiueoaiaioioia"); foreach($array as $val){ print $val."→".preg_replace($pattern,$replacement,$val)."<br>"; }
お礼
ご回答ありがとうございます。 preg_replaceは使ったことがないので、勉強してやってみたいと思います。 PHPマニュアルのpreg_replaceのページを読みましたが、preg系正規表現の仕組みがあまり理解できませんでした。 自分でも以下のコードを書いてみたのですが、なぜeregとpreg、"abc"と"あいう"で処理が異なるのか理解できておりません。 $abc="a、b、cなど。"; $aiu="あ、い、うなど。"; $abc_ereg=mb_ereg_replace('(^[^な]+).+','\\1',$abc); $abc_preg=preg_replace('/(^[^な]+).+/','${1}',$abc); $aiu_ereg=mb_ereg_replace('(^[^な]+).+','\\1',$aiu); $aiu_preg=preg_replace('/(^[^な]+).+/','${1}',$aiu); $abc_eregの結果は、a、b、c $abc_pregの結果は、a $aiu_eregの結果は、あ、い、う $aiu_pregの結果は、あ、い、うなど。 preg系正規表現の参考サイトで、プログラミング初修者にも分かり易いものがあれば是非ご教示ください。
- shimix
- ベストアンサー率54% (865/1590)
>任意の文字列から文字列"あい"でない文字を抽出したい そもそもブラケットで括る必要はないのでは?
お礼
ご回答ありがとうございます。 ブラケットで括らないとなると、"^あい"と記述することなろうかとぞんじますが、そうすると、"あい"で始まる文字列を抽出することになり、目的を果たせないのではないでしょうか?
お礼
ありがとうございます。 お陰様で大分理解できました。