- ベストアンサー
Perlで使える正規表現を教えて下さい。
Perlで使える正規表現を教えて下さい。 半角英語で、小文字が3文字以上続いた後、大文字が来る場合、その大文字の右にスペースを入れる。 これをPerlで使える正規表現を教えて頂けないでしょうか? 例 $str = 'AaaAaaaBbbbbCccccDddBbA'; # Aaa Aaaa Bbbbb Ccccc DddBbA ちなみに、色々ネットで調べて試してみて、 $str =~ s/([a-z])([A-Z])/$1 $2/g; が最も近いコードになったのですが、2文字続いただけでもスペースが入り困っています。 宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
$str="AaaAaaaBbbbbCccccDddBbA"; $str=~s/([a-z]{3}[a-z]*)([A-Z]{1})/$1$2 /g; print $str; これで出力は AaaAaaaB bbbbC ccccD ddBbA になります。 小文字(aからz)が3文字あって、その後0以上、更に大文字(AからZ)が1文字ある場合 にその後にスペースを入れる。
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
えぇと.... 大文字の「右」と「左」のどっち? 文章は「右」と言ってるけど, 例は「左」になってるよ... あれ? 他にも食い違ってる.... Perl のとあるバージョンからは, 前方一致や後方一致を駆使して ・右: s/(?<=[a-z]{3}[A-Z])/ /g; ・左: s/(?<=[a-z]{3})(?=[A-Z])/ /g; のような方法も考えられます. ただし, すでに書いたように文章と例で食い違いがあるので, このような方法であなたの期待する結果が得られるかどうかは分かりません.
お礼
質問文が間違っていますね。 すみませんでした。左です。 こういった方法もあるのですね。 とても参考成りました。 ありがとうございます!
お礼
詳しい説明も付けていただきありがとうございます。 とても参考になりました!