正規表現
正規表現
文字列 検索エンジン。 文字列による検索だけでなく、メタ文字と呼ばれる制御文字を使って、不特定の文字 や 文字の配置場所 などを指定できる。
メタ文字
正規表現として特別な意味を持つ文字
種類 | 概要 | 該当するメタ文字 |
---|---|---|
文字クラス | 文字にマッチする文字 | . , [a-zA-A] , [^a-z] |
量子化 | 直前の文字の繰り返しを指定する文字 | ? , * , + , {1,3} |
位置指定子 | 位置にマッチする文字 | ^ , $ |
グループ化 | 文字をグループ化する文字 | (foo|bar) |
エスケープ | メタ文字をエスケープする | \ |
文字クラス
. ドット 任意の一文字にマッチする
例
田中.郎
以下にマッチする
田中太郎, 田中次郎, 田中三郎
[] 特定の一文字にマッチする
例
田中[一二三]郎
以下にマッチする
田中一郎, 田中二郎, 田中三郎
繰り返しを指定するメタ文字
メタ文字 | 意味 | 使用例 | マッチする例 |
---|---|---|---|
* |
直前の文字が 0回以上 繰り返す。 最長一致。 | Windows *95* |
Windows 95 , Windows95 |
+ |
直前の文字が 1回以上 繰り返す。最長一致。 | Windows +95 |
Windows 95 |
? |
直前の文字が 0 もしくは1回 繰り返す。 最長一致。 | Windows ?95 |
Windows95 , Windows 95 |
*? |
直前の文字が 0回以上 繰り返す。 最短一致。 | ||
+? |
直前の文字が 1回以上 繰り返す。最短一致 | ||
{m, n} |
直前の文字が、 m回以上、n回以下繰り返す | [0-9]{3}-[0-9]{4} |
123-4567 |
最長一致と最短一致について
例として、 直前の文字が任意の一文字を表す 「.」の場合、最長一致と最短一致とでマッチ範囲が異なる
<a href="yahoo.co.jp>Yahoo Japan</a> <a href="google.com">Google</a> <a href="twitter.com">Twitter</a>
正規表現 | マッチ範囲 |
---|---|
<a .*</a> |
一行全てにマッチ |
<a .*?</a> |
各リンクにマッチ |
位置指定
^ 行頭へのマッチ
行頭のインデントにマッチさせる
^\s+
$ 行末へのマッチ
行末にマッチさせる
$
文字位置へのマッチ1 肯定先読み (?=検索文字)
雲の前の形容詞にマッチさせる
巻雲 巻積雲 巻層雲 高積雲 高層雲 積乱雲 乱層雲 積雲層 積雲層雲
.*?(?=雲)
.*?
次の文字に対して最短一致.*
次の文字に対して最長一致
文字位置へのマッチ2 否定先読み (?!検索文字)
乗り物の飛行機にマッチさせる
飛行機雲を作りながら飛行機が飛んでいる
飛行機(?!雲)
文字位置へのマッチ3 肯定後読み (?<=検索文字)
ローソンの店名のみにマッチさせる
(?<=ローソン).+?店
.+?
次の文字までの最短一致.+
次の文字までの最長一致
文字位置へのマッチ4 否定後読み ?<!
姓が田中以外の太郎にマッチさせる
(?<!田中)太郎
その他のメタ文字
グループ化
- ()
- 正規表現をグループ化するためのメタ文字
- 後方参照するためのメタ文字
(Wine){2,}
Wine, WineWine, WineWineWine
- | 複数の正規表現をOR条件でつなぐメタ文字
abc|xyz
abc,xyz
(Vodka|Wine)
Vodka, Wine