正規表現の基礎

技術

IT業界も長いが使うたび正規表現を忘れるので一度まとめておきたいと思ったのでこちらでまとめます。

目次

特殊文字

.               # 任意の一文字
*              # 直前の文字の任意の数繰り返し(0回を含む)
.*             # 任意の文字列。(改行コード以外)
^             # 行頭。 ^abcは"abcdef"にマッチする
$             # 行末。 abc$は"defabc$"にマッチする
<tab>     # tab
<space><space>* # 連続するSPACE
[]            # 文字セット。囲みの中の任意の1文字にマッチする
[^]         # 文字セットの否定。囲みの中以外の任意の1文字にマッチする
|              # または
+            # 直前の1文字の1回以上の繰り返し。abc+はabにはマッチせず、abc, abcc,abcccにはマッチする
.+           # 任意の1文字の1回以上の繰り返し。第.+段と各と第1段,第10段,第100段など桁が増えても対応できる。
?            # 直前の文字の0回または1回の登場。abc?はab,abcのいずれかにのみマッチする。
()           # グループとして1つのまとまりとみなす。(abc)+はabc abcabc abcabcabcなどにマッチする。
\            # メタキャラクタの特別の意味を打ち消す。^の文字を表現したければ|^
{}          # 直前の文字,グループが{n} は n回、{n,} は n回以上、{n,m} は n~m回繰り返したものにマッチ。[0-9]{4}は2021にマッチ

制御文字

\0      #ヌル(NUL:\x00)
\a      #ベル(BEL:\x07)
[\b]    #バックスペース(BS:\x08)
\t      #タブ(TAB:\x09)
\f      #フォームフィード(FF:\x0C)
\r      #復帰(CR:\x0D)
\n      #改行(LF:\x0A)
\v      #垂直タブ(VT:\x0B)
\e      #エスケープ(ESC:\x1B)
\cX     #Ctrl-X

定義済表現

\d	#数字文字([0-9])
\D	#\d以外の文字
\w	#_を含む英数文字([a-zA-Z0-9_])
\W	#\w以外の文字
\s	#空白文字 ([ \t\f\r\n\v])
\S	#\s以外の文字
\h	#水平空白文字([ \t])
\H	#\h以外の文字
\v	#垂直タブ文字([\v])
\V	#\v以外の文字
\R	#改行文字([\r\n])*2
\N	#\R以外の文字
\C	#1バイト文字*3

[…](大括弧)による囲みの例

[abc]               #abcのうち任意の一字
[abc][0123456789]   #a0, a1やb3,b5, c4,c9などがマッチ
[a-c][0-9]          #[abc][0123456789]と同じ
[A-Za-z_]           #アルファベットの大文字または小文字の1字
[^0-9]              #0-9以外の文字

|(縦線)の例

abc|def             #abcまたはdefにマッチ
^abc|^def           #行頭がabcまたはdefにマッチ
^abc|def$|ghi       #行頭abcまたは行末defまたはghiが出現にマッチ

キャプチャグループ(, , …)

(...) で囲んだ正規表現にマッチした文字列(グループ)を、\1, \2, ...\9 で参照することができる。
"ABCABC"は(ABC)(\1)にマッチする
"ABB"は(A)(B)(\2)にマッチする

最短マッチング

*?
<.*>は<ABC><DEF>について最長マッチなので<ABC><DEF>にマッチする
<.*?>は<ABC><DEF>について最短マッチなので<ABC>にマッチする

+?
<.+>は<ABC><DEF>について最長マッチなので<ABC><DEF>にマッチする
<.+?>は<ABC><DEF>について最短マッチなので<ABC>にマッチする

コメント

タイトルとURLをコピーしました