- ベストアンサー
正規表現について
正規表現を使用して文字列の置換(ereg_replace)をしたいと思うのですが、 うまくいかず悩んでおります。。 以下の文字列があったとします。 【AAA】【BBB】【CCC】DDD 文字列の中から先頭から始まる【】でくくられたものだけ(【AAA】)だけ削除して、 結果を【BBB】【CCC】DDDとしたいのですが、正規表現でどのようにヒットさせればよいのか分りません。 ※【】の中にくる文字はAAAとは限りません。 お手数ですがご教授頂けますでしょうか。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
先頭の【】で囲まれたものというと単純に「^【.*?】」になりますね ちなみに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; ?>
その他の回答 (4)
- yuu_x
- ベストアンサー率52% (106/202)
UTF8 はデータ自体が UTF8 であるかどうかまで検証できる、プログラマにとってはありがたい仕様になっている。 u オプション を指定することで関数内で、正確に UTF8 の文字コードを扱えるわけだ。 別に指定しなくても、動作自体にほとんど違いはない。 u オプションは、渡されたものが バイナリでも他の文字コードでもなく、UTF8 であることを保証してくれる。そういったオプションだ。 重箱の隅かもしれないが、データの全てが UTF8 にというわけにはいかない。 UTF8 でのシングルバイト関数の利用もだましだましやっているに過ぎない。
お礼
求めていた回答以上に色々勉強をさせて頂きました。 ありがとうございました。
- yambejp
- ベストアンサー率51% (3827/7415)
あれ?u修飾子はPCRE8でPerl非互換としてUTF8に妥当性があると認識していましたがそうではない?
- yuu_x
- ベストアンサー率52% (106/202)
ちなみに preg_ はマルチバイト対応ではない。
- Tacosan
- ベストアンサー率23% (3656/15482)
【】のネストが可能かどうかによって恐ろしく難易度が変わるんだけど, どうなんでしょうか? ネスト不可なら最短一致を使ってもいいし「】 じゃないもの」という指定でもいい.
補足
すみません。 説明が足りませんでした。 ネストはしません。
お礼
ご丁寧に教えて頂きありがとうございました。 別の方からもアドバイスもあり、とても勉強になり、また助かりました。 今後とも宜しくお願い致します。