- ベストアンサー
マッチした内容を取り出す構文を1行で書くには
もろ初心者な質問ですみません。 正規表現の質問です。 ある変数 $s='congratulations!' の中からアルファベットを取り出す場合、 $s=~/[a-z]*/g; $s=$1 とすれば congratulations がとりだせます。 しかしこの作業をいちいち2行にわけて書かないといけないものなのでしょうか。手元にある何冊かの教本に目を通す限り、そのようなのですが。。。 $s=$s=~/[a-z]*/g ? $1 : '' とやれば一行にまとめられますけど、これなら元の2行の構文の方がすっきりするような。。。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じですね。 my $s = 'congratulations!'; ($s) = ( $s =~ /([a-z]+)/ ); print $s,"\n\n"; my $t = 'good luck!'; my @t = ($t =~ /([a-z]+)/g ); foreach my $w (@t) { print $w, "\n"; }
お礼
ありがとうございます。 今まで接してきた言語では文字列から条件にあう一部分を抽出する関数があって一行でまとめられるのに、なんでPerlにはないのかなと不思議に思いました。 まあ、二行を一行にまとめるだけでわざわざ関数を用意する方も何かと思います。 ($s)。なんで()をつけているのかと思いきや、ちゃんと理由があるんですね。 勉強になりました。