目次
01. 正規表現
02. 正規表現のパターン
・* (アスタリスク) 直前の文字が0回以上繰り返す場合にマッチする
・.* .は任意の1文字で*は直前のパターンを0回以上繰り返し
・.+ .は任意の1文字で+は直前のパターンを1回以上繰り返し
・? (クエスチョンマーク) 直前の文字が0回または1回の場合にマッチする
・{n,m} 直前の文字がn回以上m回以下続いている場合にマッチする
04. 正規表現のパターン(最短一致)
05. 定義済みの正規表現
・\w アルファベット or 数値 or アンダースコアの1文字があるか wordのw(小文字)
正規表現とは
正規表現(Regular Expression)は、文字列の中から特定の文字列やパターンを検索したり、置換する時に使用します。様々なプログラム言語で利用できます。テキスト処理において便利な機能です。
正規表現は、以下のような場面で利用されます。
・テキストデータから特定の文字列やパターンを検索する
・テキストデータの入力チェックを行う
・ログファイルから必要な情報を抽出する
・ファイル名のパターンを指定して複数のファイルを一括で処理する
よく使うパターン
| パターン | 意味 | 
|---|---|
| ^[0-9]+$ | 数値のみの場合マッチします | 
| ^\d{3}-\d{4}$ | 郵便番号 | 
| ^0\d{2}-\d{4}-\d{4}$ | 電話番号(先頭0+数値2桁-数値4桁-数値4桁) | 
| [0-9]{5} | 数値5桁 | 
| ^\d{5}$ | 文字列の最初から最後まで、数値5桁 | 
| ^.*ABC.* | 文字列に指定の文字(ABC)が含まれているか | 
| ^(?!.*ABC).*$ | 指定の文字列(ABC)が含まれていないときにtrueになります | 
| ^[0-9a-f]{64}$ | ハッシュ値の64桁(16進数:0-9とa-f) | 
| ^\d{4}/\d\d/\d\d$ | YYYY/MM/DD 2022/11/01はマッチします | 
| ^https?://localhost:.+/servlet-hello/ | URL 先頭がhttpまたはhttpsで1文字以上の任意のポート番号 | 
| <a href=".*"> | 指定の文字列と任意の文字列を取得する 例:<a href="#B04">,<a href="#B05">がマッチします。 | 
正規表現のパターン
. (ドット) 任意の1文字を表す
例
A.CAと任意の一文字とCか
| マッチする(true) | AEC | 
| マッチしない(false) | AEEC、AC | 
※ドット(.)を文字として扱う場合はドット(.)の前にエスケープ(\)が必要。拡張子の.txtで判別したい時等。
| (パイプ) orを表す
例
A|BAまたはBか
| マッチする(true) | A、ADD、FB | 
| マッチしない(false) | C | 
^ (ハット) 先頭を表す
例
^A先頭の文字はAか
| マッチする(true) | ABC | 
| マッチしない(false) | BAC | 
$ (ドル) 末尾を表す
例
A$末尾の文字はAか
| マッチする(true) | CBA | 
| マッチしない(false) | ABC | 
[ ] (角括弧) かっこ内のどれか1文字にマッチするか
例
[ABC]A,B,Cのどれか1文字にマッチするか
| マッチする(true) | B、BB、DDB | 
| マッチしない(false) | D | 
※[A-C]と同じ意味
例
[a-c2-5]aからcまたは2から5のどれか1文字にマッチするか
| マッチする(true) | b、3 | 
| マッチしない(false) | d | 
※-は範囲を表す
例
[abc][012]a,b,cのどれか1文字と0,1,2のどれか1文字にマッチするか
| マッチする(true) | a1 | 
| マッチしない(false) | 12 | 
例
[^ABC]A,B,C以外のどれか1文字にマッチするか
| マッチする(true) | F | 
| マッチしない(false) | C | 
※この場合の^は先頭文字を表す^とは別の意味になる
+ 直前の文字が1回以上繰り返す場合にマッチする
例
ABC+ABと+の直前の文字Cが1回以上あるか
| マッチする(true) | ABC、ABCC、ABCD | 
| マッチしない(false) | AB、BBC | 
* (アスタリスク) 直前の文字が0回以上繰り返す場合にマッチする
例
ABC*ABと*の直前の文字Cが0回以上あるか
| マッチする(true) | ABC、ABCC、ABCD、AB | 
| マッチしない(false) | BBC | 
.* .は任意の1文字で*は直前のパターンを0回以上繰り返し
例
A.*EA(任意の文字列)Eとなり2文字のAとEは確定で間に0文字からN文字入ります
| マッチする(true) | AE、AXXE | 
| マッチしない(false) | ABC | 
.+ .は任意の1文字で+は直前のパターンを1回以上繰り返し
例
A.+EA(任意の文字列)Eとなり2文字のAとEは確定で間に1文字からN文字入ります
| マッチする(true) | ACE、AXXE | 
| マッチしない(false) | AE | 
? (クエスチョンマーク) 直前の文字が0回または1回の場合にマッチする
例
ABC?ABと?の直前の文字Cが0または1個であるか
| マッチする(true) | ABC、ABCCC(ABCで一致)、ABCD(ABCで一致)、AB | 
| マッチしない(false) | BBC | 
正規表現のパターン(n回続く{})
{n} 直前の文字がn回続いている場合にマッチする
例
a{3}| マッチする(true) | aaa、aaaaa(5文字:aaaで一致) | 
| マッチしない(false) | aa | 
※aの3桁とする場合は、^a{3}$とします。
{n,} 直前の文字がn回以上続いている場合にマッチする
例
a{3,}| マッチする(true) | aaa、aaaaa(5文字:aaaaaで一致) | 
| マッチしない(false) | aa | 
※a{3,}?でaaaaa(5文字)の場合は、aaaでマッチします。(最短一致)
{n,m} 直前の文字がn回以上m回以下続いている場合にマッチする
例
a{3,5}| マッチする(true) | aaa、aaaaa(5文字:aaaaaで一致)、aaaaaa(6文字:aaaaaで一致) | 
| マッチしない(false) | aa | 
※a{3,5}?でaaaaa(5文字)の場合は、aaaでマッチします。(最短一致)
正規表現のパターン(最短一致)
+? 直前の文字が1回以上繰り返す場合にマッチする
例
C+?| マッチする(true) | ABCCC(最初のCが一致:最短一致) | 
| マッチしない(false) | AB | 
※パターンがC+で、文字がABCCCの場合は、CCCが一致します。(最長一致)
?? 直前の文字が0回または1回の場合にマッチする
例
ABC??| マッチする(true) | ABCCC(最初のABが一致:最短一致)、AB | 
| マッチしない(false) | A | 
※パターンがABC?で、文字がABCCCの場合は、ABCが一致します。(最長一致)
定義済みの正規表現
\s 空白1文字か ※spaceのs(小文字)
例
a\sc| マッチする(true) | a c | 
| マッチしない(false) | a c | 
\S 空白以外の1文字か ※spaceのS(大文字)
例
a\Sc| マッチする(true) | abc | 
| マッチしない(false) | a c | 
\d 数字1文字か ※digitのd(小文字)
例
a\dc| マッチする(true) | a5c | 
| マッチしない(false) | abc | 
※[0-9]と同じ
\D 数字以外の1文字か digitのd(大文字)
例
a\Dc| マッチする(true) | abc | 
| マッチしない(false) | a1c | 
※[^0-9]と同じ
\w アルファベット or 数値 or アンダースコアの1文字があるか wordのw(小文字)
例
a\wc| マッチする(true) | a_c | 
| マッチしない(false) | a c | 
※[a-zA-Z0-9_]と同じ。
\W アルファベット or 数値 or アンダースコア以外の1文字があるか wordのw(大文字)
例
a\Wc| マッチする(true) | aあc | 
| マッチしない(false) | a1c | 
※[^¥w]と同じ。¥wの否定。
エスケープシーケンス(正規表現の記号を文字として表示)
\ エスケープしたい文字の前に\(文字コードは0x5c)を付ける
エスケープをつけることによって、文字であることを表します。
エスケープがない場合は、正規表現の意味になります。
例
A\.CAとドットとCか。エスケープがない場合.は任意の1文字の意味になる。
| マッチする(true) | A.C | 
| マッチしない(false) | AEC、AC | 
Windowsのフォルダの区切りは\円マークも同じなので注意が必要です。
関連の記事
