とにかく何でもいい文字の連続を表現するには、「.*」(ピリオドアスタリスク)でいけるんですね。
preg_replace("/(\(|().*(\)|))/","変えたよ",$str)要するに、かっこの半角と全角の両方を|で認識させるようにして、半角かっこはもちろんバックスラッシュでエスケープして、それを半角かっこでくくってグループ化し、そのあとに閉じかっこも開きかっこと同様にグループ化して指定して、その間に.*を入れてカッコ内にどんな文字があってもOKになった、と。
やや時間がかかりました。。解決して嬉しいです(笑)
参考になったページはここ。とてもよく分かりましたm(_ _)m「サルにもわかる正規表現入門」。
http://www.mnet.ne.jp/~nakama/
::::::::::::::::::::::::::::::::::::::::::
■追記:この方法に弱点を発見しました。。
いくつもの()に囲まれた部分が、同一文内にあると、一番最初の開きかっこから、一番最後の閉じかっこまでがくくられて、ひとつと認識されてしまい、途中の文章が全部ずっぱり消えてしまいます。。
.*は可能な限り最後までつなげられる、という法則があるからですね。。
さて、困りました。どうしようかな。。
■追記2:一応解決です。応急策。
preg_replace("/(\(|().{5,30}(\)|))/","OK",$str);みたいに、間にある文字数をだいたい指定してやれば、まあまあいけそうです。ちょっとアナログちっく。
■追記3:指定した文字数がマルチバイトの文字数じゃないので、どうしよう、とおもったら、pregはuというutf-8オプションがあったので、uを追加してやると日本語を一文字として認識してくれたようです。ありがたや。。
preg_replace("/(\(|().{5,10}(\)|))/u","OK",$str);
0 件のコメント:
コメントを投稿