正規表現とは
プログラミングで文字列処理を行う時に便利な表現を正規表現と言います。正規表現を用いると、たとえば文字の検索が容易に行えます。正規表現は「表現」という言葉のとおり、文字や文字列を、ある規則に従って表現(パターン化)することができるもので、使えるようになると非常に便利で強力なツールとなります。今回は、その正規表現における繰り返し表現を取り上げてみます。
正規表現での「繰り返し」の書き方
任意の一文字を繰り返す
任意の一文字を正規表現では、.
(ピリオド)を使って表現します。
例)
[正規表現]
A.bc
[マッチする例]
A1bc
AJbc
A#bc
直前の文字の繰り返し(1回以上の繰り返し)
+
(プラス)を使用すると、「1回以上の繰り返し」を表現できます。たとえば任意の一文字の繰り返しを表現するには、.+
と書くことで行うことができます。
例)
[正規表現]
A+
[マッチする例]
AAA
AAAAAAA
直前の文字の繰り返し(0回以上の繰り返し)
「直前の文字」を表すには、上述で紹介した+
(プラス)と*
(アスタリスク)があります。+の方は、既に紹介しましたが「1回以上の繰り返し」を示しますので、たとえばa+
と記述すると、「aが1回以上繰り返す」という意味になります。対して、*(アスタリスク)の方は、「0回以上の繰り返し」を示します。b*
と表現すると、「bの0回以上の繰り返し」を表すことが出来ます。
例)
[正規表現]
Ab*
[マッチする例]
A
Ab
Abbb
グループ化して複数の文字を繰り返す
複数の文字をグループ化し対象とするには、()
で文字を囲みます。
例)
[正規表現]
(Hello)+
[マッチする例]
Hello
HelloHello
HelloHelloHello
任意の文字を繰り返す
上述した.
と*
や+
を用いた例を幾つか紹介します。
1)aとcの間に任意の文字が繰り返す例
例)
[正規表現]
a.+c
[マッチする例]
abc
abbbc
aOIUc
2)改行を含めた任意の文字の繰り返し
任意の文字を示す.
は、改行にはマッチしないため、以下のように全ての文字に一致するように書く必要があります。¥d
は数字を示し、¥D
は数字以外の文字を示します。これを[]
で囲むことで改行もマッチするようになります。
例)
[正規表現]
a[¥d¥D]+b
最長一致・最短一致
最長一致・最短一致という表現方法もあります。繰り返した文字や文字列を「*」や「+」を用いて、マッチするだけ全て取得する最長マッチ。これらは、上述してきたものになります。逆に可能な限り短い文字列を得るための表現を最短一致と言います。これには、?
を使用することで可能です。?は、「0回または、1回の出現」にマッチするので、その習性を利用します。
例)
[正規表現]
a+?
[マッチする例]
a
*対象文字がaaaaaaaaaと、複数のaを連結した文字列だったとしても1つのaにのみマッチします。
繰り返しの回数を指定する
回数を指定するには、{}
を使用します。以下に幾つかの使用例を紹介します。
n回繰り返す
{2}
で2回の繰り返しを。{3}
で3回の繰り返しというように{}
内に数字を入れることで表現できます。
n回以上繰り返す
{n,}
と表現することで、n回以上の繰り返しにマッチさせることができます。
例)
[正規表現]
[0-9]{3}
[マッチする例]
123
233
などの3桁の数字にマッチ
n回以上m回以下繰り返す
{n, m}
と記述することで、マッチさせることができます。
例)
[正規表現]
d{1,4}
[マッチする例]
193
1
89
9876
まとめ
正規表現は、いろんなパターンを作ることが出来ます。正規表現を使いこなせると、プログラミングやエクセルを使う際に役に立つので、少しずつ覚えていきましょう。自分が必要な正規表現から覚えて、実際に活用してみてくださいね。