/match/のように、書いた文字に単純にマッチさせる方法の他に、正規表現を使ってマッチさせる方法があります。
「パターンマッチ」は上記のような単純マッチの他に、
「どの文字」が「どれだけ連続するか」という書き方が基本です。
■「どの文字」が「どれだけ連続するか」
["a"一文字だけにマッチなら]
/a/
["aa"の二文字もシンプルに書いたほうが明解]
/aa/
["aaaaa"になると、どれだけ連続するか指定]
/a{5}/
["a"か"b"なら集合を使う]
/[ab]/
集合を使わない方法もある
/a|b/
["a"か"b"の10連続にマッチ]
/[ab]{10}/
集合を使わない方法で書くと
/(a|b){10}/
もしカッコを書いていないと
/a|b{10}/
"a"もしくは"b"10連続にマッチという意味になってしまう
["a"から"z"で始まって"bc"が後続するパターン]
/[a-z]bc/
これは集合を使わないと大変
上記が10連続するパターンは
/([a-z]bc){10}/
これもカッコでくくらないと"a"から"z"までの文字の後に"b"がきて、その後に"c"が10連続する意味になってしまう。
このようにカッコは、「どのパターンの文字」か一つにまとめる役割があるので、これがどれくらい連続するかの指定ができる。
■いよいよ正規表現に突入
「どのパターンの文字」が「どれくらい連続」するかというパターンマッチにおいて、
「どれくらい連続」かの指定は以下の6パターンのみです。
/a?/ ・・・"a"が0文字か1文字
/a*/ ・・・"a"が0文字以上
/a+/ ・・・"a"が1文字以上
/a{2}/ ・・・"a"が2文字
/a{2,5}/ ・・・"a"が2~5文字
/a{2,}/ ・・・"a"が2文字以上
最初にくる「どのパターン文字」なのかを正規表現で指定します。
今までは文字の集合を[a-z]のように便利に記述してきました。
正規表現ではこれに似たような文字の集合を、より短い記述で指定できます。
まずよく使うのは、任意の1文字を表す .(ドット)があります。
よく「.*」というのを見ると思います。
これは任意(どれか不特定)の1文字があってこれが0文字以上続くというのを意味しています。
つまり「.*」と書くと文字が続くだけマッチします。
ただし、任意の1文字ですが唯一「改行」だけは含まないので実質改行の直前までマッチすることになります。
「.*と書くと改行以外の任意の文字すべてにマッチさせることができる。」
という文字列があった場合、
/.*/
と書いてすべてをマッチさせることができる。
「パターンマッチ」は上記のような単純マッチの他に、
「どの文字」が「どれだけ連続するか」という書き方が基本です。
■「どの文字」が「どれだけ連続するか」
["a"一文字だけにマッチなら]
/a/
["aa"の二文字もシンプルに書いたほうが明解]
/aa/
["aaaaa"になると、どれだけ連続するか指定]
/a{5}/
["a"か"b"なら集合を使う]
/[ab]/
集合を使わない方法もある
/a|b/
["a"か"b"の10連続にマッチ]
/[ab]{10}/
集合を使わない方法で書くと
/(a|b){10}/
もしカッコを書いていないと
/a|b{10}/
"a"もしくは"b"10連続にマッチという意味になってしまう
["a"から"z"で始まって"bc"が後続するパターン]
/[a-z]bc/
これは集合を使わないと大変
上記が10連続するパターンは
/([a-z]bc){10}/
これもカッコでくくらないと"a"から"z"までの文字の後に"b"がきて、その後に"c"が10連続する意味になってしまう。
このようにカッコは、「どのパターンの文字」か一つにまとめる役割があるので、これがどれくらい連続するかの指定ができる。
■いよいよ正規表現に突入
「どのパターンの文字」が「どれくらい連続」するかというパターンマッチにおいて、
「どれくらい連続」かの指定は以下の6パターンのみです。
/a?/ ・・・"a"が0文字か1文字
/a*/ ・・・"a"が0文字以上
/a+/ ・・・"a"が1文字以上
/a{2}/ ・・・"a"が2文字
/a{2,5}/ ・・・"a"が2~5文字
/a{2,}/ ・・・"a"が2文字以上
最初にくる「どのパターン文字」なのかを正規表現で指定します。
今までは文字の集合を[a-z]のように便利に記述してきました。
正規表現ではこれに似たような文字の集合を、より短い記述で指定できます。
まずよく使うのは、任意の1文字を表す .(ドット)があります。
よく「.*」というのを見ると思います。
これは任意(どれか不特定)の1文字があってこれが0文字以上続くというのを意味しています。
つまり「.*」と書くと文字が続くだけマッチします。
ただし、任意の1文字ですが唯一「改行」だけは含まないので実質改行の直前までマッチすることになります。
「.*と書くと改行以外の任意の文字すべてにマッチさせることができる。」
という文字列があった場合、
/.*/
と書いてすべてをマッチさせることができる。