目次
背景
正規表現(Regular Expressions)は偶に使うのでメモ。
正規表現
文字を表す記号
.
: 任意の1文字(ワイルドカード)\w
: 任意の英数字\d
: 任意の数字\s
: 任意の空白文字\t
: タブ文字¥r, ¥n, ¥r¥n
: 改行コード英語大文字
:[A-Z]
ひらがな
:[ぁ-ん]
カタカナ
:[ァ-ン]
半角記号
:[\x21-\x7E]
全角記号
:[\uFF01-\uFFE6]
繰り返しの記号
- 量指定子
+
: 1回以上の繰り返し*
: 0回以上の繰り返し?
: 0回または1回の出現{n,m}
: n回以上m回以下の繰り返し
繰り返しの最短一致(控えめな一致)
:*?
,+?
,??
,{n,m}?
文字クラス(Either)
- 集合演算子
[ ]
: 指定された文字のいずれか1文字(Either or)[^ ]
: 指定された文字以外の1文字[-]
: 範囲指定
&&
: 文字クラス内でAND表現(Javaのみ)
グループ(Whole)
- グループ化演算
()
: 指定された文字列を結合(Whole)
|
: OR条件- キャプチャグループ
- 後方参照
\1, \2...
: 正規表現内で使う$1, $2...
: 置換パターンで使う
- 後方参照
(?:)
: キャプチャグループを作らない
アンカー(Where)
^
: 文字列の先頭$
: 文字列の末尾¥b
: 単語の境界指定先読み
:(?=...)
否定先読み
:(?!...)
肯定後読み
:(?<=...)
否定後読み
:(?<!...)
条件
- OR条件:
- 1文字:
[abc]
- 2文字以上:
(りんご|ばなな)
- 1文字:
- AND条件:
- And条件:
(?=.*りんご)(?=.*ばなな).*
- 文字クラス:
[ab&&[cd]]
- And条件:
- NOT条件:
- 文字を含まない:
[^abc]
- 文字列をで始まらない:
(?!xxx)
- 文字列をで終わらない:
.+(?!<!xxx)
- 文字列を含まない:
(?!.*xxx).*
- 文字を含まない:
数値
- 数値の桁数:
^\d{n}$
- カンマ桁区切り:
^\d{1,3}(,\d{3})*$
- 小数点含む数字:
^\d+(\.\d+)?$
- 整数:
^-?\d+$
具体例
- 日付:
^\d{4}/\d{1,2}/\d{1,2}$
- URL:
^(https?|ftp)://[^\s/$.?#].[^\s]*$
- 郵便番号:
^\d{3}-\d{4}$
- パスワード強度のチェック:
(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}
- XMLのタグ:
<([a-zA-Z]+)>(.*?)<\/\1>
フラグ
i
(case insensitive): 大文字小文字区別なしg
(case global):- ローカルパターン: 最初の出現だけマッチ
- グローバルパターンパターン: 全ての出現にマッチする
m
(multiple lines): 複数行にマッチする
エスケープが必要な記号
\
: バックスラッシュ.
: ドット*
: アスタリスク+
: プラス?
: クエスチョン{}
: 波括弧[]
: 角括弧()
: 丸括弧^
: キャレット$
: ドルマーク|
: パイプ