正規表現一覧

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

概要

正規表現とは、いくつかの文字列を1つの形式で表現するための表現方法のことである。
では、なぜこの表現方法が有名なのかといえば、この表現方法を利用すれば、多くの文章の中から簡単に文字列を検索することができるためである。

Windows10(Windows 10)、WINDOWS10(WINDOWS 10)、Windows7(Windows 7)、WINDOWS7(WINDOWS 7)という文字列を正規表現で検索する場合は、下記のようにする。

W(indows|INDOWS) ?(10|7)

意味
(abc|xyz) : abcまたはxyzのいずれかの場合にマッチする
?         : 直前の文字が0個か1個の場合にマッチする



基本的な正規表現

最長一致とは、最長文字列を優先して検索し、最短一致とは、最短文字列を優先して検索する。

基本的な正規表現

文字 説明 正規表現の例 マッチする例
. 任意の1文字にマッチする。 . A
+ 直前の文字が1回以上繰り返す場合にマッチする。
最長一致。条件に合う最長の部分に一致する。 
go+gle gogle
go...gle
* 直前の文字が0回以上繰り返す場合にマッチする。
最長一致。条件に合う最長の部分に一致する。
go*gle ggle
go...gle
? 直前の文字が0個か1個の場合にマッチする。
最長一致。条件に合う最長の部分に一致する。
go?gle ggle
gogle
+? 直前の文字が1回以上繰り返す場合にマッチする。
最短一致。条件に合う最短の部分に一致する。
go+?gle gogle
go...gle
*? 直前の文字が0回以上繰り返す場合にマッチする。
最短一致。条件に合う最短の部分に一致する。
go*?gle ggle
go...gle
?? 直前の文字が0個か1個の場合にマッチする。
最短一致。条件に合う最短の部分に一致する。
go??gle ggle
gogle
| いずれかの条件(OR条件)として使う。 goog(le|ol) google
googol
\ 直後の正規表現記号をエスケープする。 go\+gle go+gle
[...] 角括弧に含まれるいずれか1文字にマッチする。 [abc]
[a-c]
a, b, c
[^...] 角括弧に含まれる文字以外にマッチする。 [^abc]
[^a-c]
a, b, c以外の文字
(...) 文字を1つのグループにまとめる。 goog(le|ol) google
googol
{n} 直前の文字の桁数を指定できる。 a{3} aaa
{n,} 直前の文字の最小桁数のみ指定できる。 a{3,} aaa
aaaa
aaaaa...
{n,m} 直前の文字の最小桁数と最大桁数を指定できる。
最長一致。条件に合う最長の部分に一致する。
a{2,4} aa
aaa
aaaaa
{n,m}? 直前の文字の最小桁数と最大桁数を指定できる。
最短一致。条件に合う最短の部分に一致する。
a{2,4}? aa
aaa
aaaa


定義済みの正規表現

文字 説明 対応する表現
\t タブ なし
\r 改行
CR(Carriage Return:0x0D)
なし
\n 改行
LF(Line Feed:0x0A)
なし
\d すべての数字 [0-9]
\D すべての数字以外の文字 [^0-9]
\s 垂直タブ以外のすべての空白文字 [ \t\f\r\n]
\S すべての非空白文字 [^ \t\f\r\n]
\w アルファベット、アンダーバー、数字 [a-zA-Z_0-9]
\W アルファベット、アンダーバー、数字以外の文字 [^a-zA-Z_0-9]


特定の位置関係の正規表現

文字 説明 正規表現の例 マッチする例
^ 直後の文字が行の先頭にある場合にマッチする。 ^google google...
$ 直前の文字が行の末尾にある場合にマッチする。 google$ ...google
\< 単語の先頭にマッチする。 \<google google*
\> 単語の末尾にマッチする。 google\> *google
\b 単語の先頭か末尾にマッチする。 \b *google*
\B 単語の先頭か末尾以外にマッチする。 \B google
\A ファイルの先頭にマッチする。 \A なし
\z ファイルの末尾にマッチする。 \z なし
\G 直前の一致文字列の末尾にマッチする。 \G なし


置換文字列で使える正規表現

文字 説明
\0 一致した文字列全体に置換する。
\1 - \9 一致した文字列の1 - 9番目に対応する文字列に置換する。
\l 次の1文字を小文字に変換する。
\L...\E 挟まれた文字列を小文字に変換する。
\u 次の1文字を大文字に変換する。
\U...\E 挟まれた文字列を大文字に変換する。



正規表現のサンプル一覧

aから始まってzで終わる3桁の文字列

a.z

aから始まってzで終わる2桁以上の文字列

a.*z

aから始まってzで終わる3桁以上の文字列

a.+z

半角数字

\d  または  [0-9]

半角数字以外

\D  または  [^0-9]

4桁の半角数字

\d{4}

4桁以上の半角数字

\d{4,}

1 - 4桁の半角数字(最長一致)

\d{1,4}

4 - 10 桁の半角数字(最長一致)

\d{4,10}

4 - 10桁の半角数字(最短一致)

\d{4,10}?

桁区切りのカンマ付数字列

\b\d{1,3}(,\d{3})*\b

半角アルファベット大文字

\u

半角アルファベット大文字以外

\U

半角アルファベット小文字

\l

半角アルファベット小文字以外

\L

半角アルファベットすべて

[\u\l]

半角アルファベット以外

[^\u\l]

英単語(半角英文字列)

\b[\u\l]+\b

1桁の偶数

[02468]

1桁以上の偶数

\d*[02468]\b

1桁の奇数

[13579]

1桁以上の奇数

\d*[13579]\b

1桁の16進数

[0-9A-Fa-f]

ひらがな1文字

[ぁ-ん]

カタカナ1文字

[ァ-ヴ]

半角カタカナ

[ヲ-゚]

改行(CRLF、LF)

\n

空白文字(半角スペース、タブ、改行文字) ※全角スペースにはヒットしない。

\s

OR条件

東京|大阪

行頭

^

行末

$

空白行(CRLF、LF)

^\n

行全体

^.*$



使用頻度の高い正規表現式

Emailアドレス(RFC準拠ではない)

^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

URL

^https?://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

ドメイン名

^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z-]{2,}$

固定電話番号

^0\d(-\d{4}|\d-\d{3}|\d\d-\d\d|\d{3}-\d)-\d{4}$

携帯電話番号

^0[789]0-\d{4}-\d{4}$

IP電話番号

^050-\d{4}-\d{4}$

フリーダイヤル

^(0120|0800)-\d{3}-\d{3}$

日付 (YYYY-MM-DD形式)

^\d{4}-\d\d-\d\d$

郵便番号

^\d{3}-\d{4}$



修飾子一覧

大文字と小文字を区別しない。

/i

式の展開(正規表現のコンパイル)を一度だけ行う。

/o

パターンの空白やコメントを無視する。

/x

対象の文字列を複数行として扱う。.(ドット)が改行にもマッチする。

/m

繰り返しマッチを行う。

/g

置換を行った結果を式として処理する。

/e



サンプルコード(Python)

 #!/usr/bin/env python
 
 import re
 
 reg = r'^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$'
 email = 'murashun@gmail.com'
 is_email = re.match(reg, email) is not None
 print(isEmail);