目次
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.C
Aと任意の一文字とCか
マッチする(true) | AEC |
マッチしない(false) | AEEC、AC |
※ドット(.)を文字として扱う場合はドット(.)の前にエスケープ(\)が必要。拡張子の.txtで判別したい時等。
| (パイプ) orを表す
例
A|B
Aまたは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.*E
A(任意の文字列)Eとなり2文字のAとEは確定で間に0文字からN文字入ります
マッチする(true) | AE、AXXE |
マッチしない(false) | ABC |
.+ .は任意の1文字で+は直前のパターンを1回以上繰り返し
例
A.+E
A(任意の文字列)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\.C
AとドットとCか。エスケープがない場合.は任意の1文字の意味になる。
マッチする(true) | A.C |
マッチしない(false) | AEC、AC |
Windowsのフォルダの区切りは\円マークも同じなので注意が必要です。
関連の記事