Wivern Blog

Personal-Tech memorandum

正規表現

いつも書き方を忘れるのでメモ。

  • \d は「半角数字1文字」を表す
  • {n,m} は「直前の文字が n 文字以上、m 文字以下」であることを表す
  • {n} は「直前の文字がちょうど n 文字」であることを表す
  • [AB] は「AまたはBが1文字」であることを表す
  • [a-z][-az] ではハイフンの意味が異なる
  • ? は「直前の文字が1個、または無し」を表す
  • . は「任意の1文字」を表す
  • + は「直前の文字が1個以上」を表す
  • * は「直前の文字が0個以上」を表す
  • ( ) はマッチする部分をキャプチャ(捕捉)する
  • キャプチャした部分は置換するときに $1\1 で参照できる
  • \w は「英単語を校正する文字(半角英数字とアンダースコア)」を表す
  • [^AB] は「AでもなくBでもない任意の1文字」を表す
  • 正規表現中の特別な文字は \ でエスケープする
  • ( ) はキャプチャだけでなく、グループ化にも使われる
  • (ABC)? は「文字列 ABC があり、または無し」を表す
  • (?: ) はキャプチャ無しでグループ化する場合に使う
  • *+ は「貪欲」で最長マッチを返すため、使い方を誤ると思いがけない結果が返る
  • *?+? にすると、最短マッチを返す
  • ^ は行頭を表す
  • $ は行末を表す
  • \t はタブ文字を表す
  • \n は改行文字を表す
  • \s は空白文字(スペース、タブ文字、改行文字等)を表す
  • ABC|DEF は「文字列ABCまたは文字列DEF」のOR条件を表す
  • ^ は行頭の意味になったり、[^ ] で否定の文字クラスの意味になったりする
  • \b は単語の境界を表す
  • (?=abc) は「abcという文字列の直前の位置」を表す(先読み)
  • (?<=abc) 「abcという文字列の直後の位置」を表す(後読み)
  • (?!abc) は「abcという文字列以外の直前の位置」を表す(否定の先読み)
  • (?<!abc) 「abcという文字列以外の直後の位置」を表す(否定の後読み)
  • キャプチャした文字列は正規表現内でも \1\2 といった連番で参照できる(後方参照)
  • ?*+ といった量指定子は ( ) の後ろに付けることもできる
  • | を使ったOR条件では、各条件内でもメタ文字が使える
  • メタ文字はバックスラッシュ(\)でエスケープする
  • [ ] 内ではメタ文字の種類や使われる位置によって各文字の働きが異なる
  • {n,}{,n} はそれぞれ「直前の文字がn個以上」「n個以下」の意味になる
  • \W\S\D\B はそれぞれ \w\s\d\b の逆の意味になる