クエスチョンマークと2つの意味
or 演算子は、有効な選択肢が正確に分かっていて、かつそのどれかが必ず含まれるときに便利です。しかし、ある部分があったりなかったりするパターンにマッチさせたい場合はどうすればよいでしょうか? そこで登場するのがクエスチョンマーク ? です。
? は、直前のグループまたは文字を省略可能にする ことができます。これにより、パターンの一部が欠けていても正規表現はマッチします。ただし注意点として、* や + のような乗数の直後に付くと、クエスチョンマークにはもう一つの効果があります。
? は、直前の乗数を「貪欲(greedy)」ではなく「最短一致(lazy)」にする こともできます。つまり、通常はできるだけ多くの文字にマッチしようとするのに対して、? を付けると可能な限り少ないテキストにマッチするようになります。
この演習はコースの一部です
Rで学ぶ中級正規表現
演習の手順
- 最後の
"s"を省略可能にして、単数の"Screen"と複数の"Screens"の両方にマッチさせましょう。 .*を使って、カンマの前に任意の文字がランダムな長さで続くパターンにマッチさせましょう。- アスタリスクの後にクエスチョンマーク
?を付けて同じパターンにマッチさせ、違いに気づけますか?
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Match both Screen and Screens by making the last "s" optional
str_match(lines, pattern = "Screens___")
# Match a random amount of arbitrary characters, followed by a comma
str_match(lines, pattern = "___,")
# Match the same pattern followed by a comma, but the "lazy" way
str_match(lines, pattern = "___,")