Featured image of post 正規表現のメモ

正規表現のメモ

目次

背景

正規表現(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文字以上: (りんご|ばなな)
  • AND条件:
    • And条件: (?=.*りんご)(?=.*ばなな).*
    • 文字クラス: [ab&&[cd]]
  • 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): 複数行にマッチする

エスケープが必要な記号

  • \: バックスラッシュ
  • .: ドット
  • *: アスタリスク
  • +: プラス
  • ?: クエスチョン
  • {}: 波括弧
  • []: 角括弧
  • (): 丸括弧
  • ^: キャレット
  • $: ドルマーク
  • |: パイプ

参考文献

Built with Hugo
テーマ StackJimmy によって設計されています。