こんなことをやろうと思った。
文字列に「集合場所 ○○」と記入されていたら、○○の部分を抜き出すコード。
最初に思いついたのが、こんなコード。
if /^集合場所 (.+)/ =~ string
p Regexp.last_match(1)
end
これは何とも読みづらい。最近の Ruby はマッチする () に名前を付けられると聞いた。さっそく試してみる。
if /^集合場所 (?<meeting_place>.+)/ =~ string
p meeting_place
end
これは見やすくなった!!
蛇足: リファクタリング
コードは一応完成したけれど、一応入力ミス対策も入れておく。集合場所を半角スペースではなく全角スペースやタブで書く人もいるかもしれない。
if /^集合場所[ ](?<meeting_place>.+)/ =~ string
p meeting_place
end
半角スペース・全角スペース・タブが入ってるけど、見た目で分からない。その上、誰かがソースコードを tabify したらタブが消えてしまう。ここは空白を表す [[:blank:]]
を使う。せっかくなので複数スペース対策も入れておこう。
if /^集合場所[[:blank:]]+(?<meeting_place>.+)/ =~ string
p meeting_place
end
やあ、人によっては「空白区切り」と言っているのに「:」を使うかもしれない。最後にその対策も入れておく。
if /^集合場所[[:blank:]::]+(?<meeting_place>.+)/ =~ string
p meeting_place
end
半角と全角のコロンも入れた。これで完成。ちょっと見栄えが悪いけど、マッチした文字列との対応が分かり易いのが良いね。
No comments:
Post a Comment