Open1

正規表現

CODE-EGGCODE-EGG

正規表現で出来ること

注意点

正規表現内は空白を入れないこと。

◆または検索

バーティカルバー( | )を利用する。

田中|たなか

◆曖昧検索

接頭辞がわかるかつ続く文字もある程度わかる場合の検索_その1

カッコ()を利用する

// cashの後に続く単語が曖昧。接頭辞をcashとして検索したい。
cash(A|B|C) // => cashAとcashBとcashCが検索対象となる。

接頭辞がわかるかつ続く文字もある程度わかる場合の検索_その2

文字クラスを利用する

cash[ABC] // => cashAとcashBとcashCが検索対象となる。
// 文字クラス単体でも利用できる。
[12345] // => 1,2,3,4,5が検索対象となる。

さきほどのカッコ()と同じように見えるが場面によって使い分けることが必要。

例えば1文字だけを検索するなら文字クラスが有効。

// 以下は同じ。しかしカッコはバーティカルバーが必要になるので面倒
// 文字クラスは簡潔に書ける。
[0123456]
(1 | 2 | 3 | 4 | 5)

2文字以上ならカッコ記述法に軍配。

(10 | 20 | 30)

文字クラスの応用

0から9を検索しようとなったらどうするか

[0123456789]

文字クラスではハイフン(-)をつかって範囲を指定することができる。

[0-9] // => 0~9すべてが検索対象

他にも全角半角アルファベットや大文字小文字、全角半角数字等をまとめて指定できる。

[a-zA-Z0-90-9]

接頭辞がわかるが続く文字がわからない検索(. ピリオド)

ピリオドを使う。ピリオドは何でも良い1文字を表す

cash. // =>cashAやcashBやcashZ、cashaなどが検索対象となる。cashAAなどは対象外

◆繰り返し

指定回数繰り返して検索

波カッコ{}を使う

ルール
ルーール
ルーーール

// ルーーールを検索したい
ルーーール // =>伸ばし棒が増えると面倒
ルー{3}ル // =>直前の文字の繰り返す回数を書く

実用的な繰り返し

// 電話番号検索
080\-[0-9]{4}\-[0-9]{4} // 080で始まる携帯番号を検索する。

補足:予約語について

ハイフンは予約語なのでバックスラッシュで文字列として認識させる。

範囲回数(以上、以下)を指定して検索

波カッコを利用する。

ルール
ルーール
ルーーール

// ルール、ルーール、ルーーールを検索したい(伸ばし棒が1以上3以下の文字列を検索)
ルー{1,3}

ピリオドと範囲回数を組み合わせた検索

・ラーメン
・塩ラーメン
・豚骨ラーメン
・味噌ラーメン
・一蘭ラーメン
・あさり汁ラーメン
// 上のすべてを検索.{0,4}ラーメン
ドットピリオド{0,4}ラーメン

無限回数(以上のみ、以下のみ指定)繰り返し

ルーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーール

// 伸ばし棒の数が不明
ルー{1,}// =>以下の指定を省略することで直前の文字を1回以上繰り返す

記号を用いた繰り返し表現(超重要表現)

クエスチョンマーク(?)

0回以上1回以下を表す。

// 同じ
ルー{0,1}ル
ルー?

プラス(+)

直前の文字を1回以上繰り返す

// 同じ
ルー{1,}ル
ルー+// ルルは検索対象外

アスタリスク(*)

直前の文字を0回以上繰り返す

// 同じ
ルー{0,}ル
ルー*// ルルも検索対象になる

ピリオドと記号を組み合わせる。

const.* // constが付くものをすべて検索する。

2文字以上の文字の塊の繰り返し

カッコ()を利用する

$1 ABCABC
$2 ABCABA
$3 ABCABCABC

(ABC){2} // $1$2が検索結果に引っかかる

実用的な繰り返し

電話番号の検索

090-3212-4354

[0-9]{3}(\-[0-9]{4}){2}

◆位置を利用した検索

行頭から検索する。(前方一致検索)

キャレット(^)を利用する。※文字ではなく行頭という位置を検索する。

2022/04/14
今日使ったお金:\2022

^2022 // =>日付の2022が引っかかる

行末から検索する。(後方一致検索)

$を利用する。※文字ではなく行末という位置を検索する。

2022/04/14
今日使ったお金:\2022
2022$ // =>2022が引っかかる

完全一致検索

^と$を利用した検索を完全一致検索という

2022/04/14
今日使ったお金:\2022
^.*2022$ // =>今日使ったお金:\2022が引っかかる
^2022.*$ // =>2022/04/14が引っかかる

実践(○○を含む検索)

aaaaaaaaaaaaaaaaaaaaaaba
aaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaabaaaaaaaaaaaaaaaa
aaaaaaaaaaaaabaaaaaaaaaa

^.*b.*$ // => bを含む行が検索に引っかかる

◆応用正規表現

空白

\s:空白、タブ、改行がヒットする。

\S:空白以外がヒットする。

数字の検索

\d:半角、全角の数字を検索する。

\D:半角、全角の数字以外を検索する。

ただしバリデーションで厳密に全角半角を区別する必要がある場面では利用しない。