• ベストアンサー

正規表現について

正規表現を使用して文字列の置換(ereg_replace)をしたいと思うのですが、 うまくいかず悩んでおります。。 以下の文字列があったとします。 【AAA】【BBB】【CCC】DDD 文字列の中から先頭から始まる【】でくくられたものだけ(【AAA】)だけ削除して、 結果を【BBB】【CCC】DDDとしたいのですが、正規表現でどのようにヒットさせればよいのか分りません。 ※【】の中にくる文字はAAAとは限りません。 お手数ですがご教授頂けますでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

先頭の【】で囲まれたものというと単純に「^【.*?】」になりますね ちなみにereg系の正規表現は非推奨です。 また元データが複数行になることも考慮するとこんな感じ <? $str=<<<eof 【AAA】【BBB】【CCC】DDD 【EEE】【FFF】【GGG】HHH WWW 【XXX】【YYY】【ZZZ】 eof; $pattern="/^【.*?】/mu"; $replacement=""; $str=preg_replace($pattern,$replacement,$str); print $str; ?>

m_flower_s
質問者

お礼

ご丁寧に教えて頂きありがとうございました。 別の方からもアドバイスもあり、とても勉強になり、また助かりました。 今後とも宜しくお願い致します。

その他の回答 (4)

  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.5

UTF8 はデータ自体が UTF8 であるかどうかまで検証できる、プログラマにとってはありがたい仕様になっている。 u オプション を指定することで関数内で、正確に UTF8 の文字コードを扱えるわけだ。 別に指定しなくても、動作自体にほとんど違いはない。 u オプションは、渡されたものが バイナリでも他の文字コードでもなく、UTF8 であることを保証してくれる。そういったオプションだ。 重箱の隅かもしれないが、データの全てが UTF8 にというわけにはいかない。 UTF8 でのシングルバイト関数の利用もだましだましやっているに過ぎない。

m_flower_s
質問者

お礼

求めていた回答以上に色々勉強をさせて頂きました。 ありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

あれ?u修飾子はPCRE8でPerl非互換としてUTF8に妥当性があると認識していましたがそうではない?

参考URL:
http://www.php.net/manual/ja/reference.pcre.pattern.modifiers.php
  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.3

ちなみに preg_ はマルチバイト対応ではない。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

【】のネストが可能かどうかによって恐ろしく難易度が変わるんだけど, どうなんでしょうか? ネスト不可なら最短一致を使ってもいいし「】 じゃないもの」という指定でもいい.

m_flower_s
質問者

補足

すみません。 説明が足りませんでした。 ネストはしません。

関連するQ&A