udemyの教材で正規表現の勉強をした。いままでなんとなく書いていたたが, これからはなんでもかける気がする…

基本的な記号

  • = 文字または数字を1文字分指定する
  • ^(キャロット) = 直後の文字または数字を指定しない
  • -(ハイフン) = 文字数字の範囲を指定する
  • (バックスラッシュ) = 直後のメタ文字を単なる文字として扱う
  • . (ワイルドカード) = なんでもよし
  • |(パイプ) = 左右のどちらかにマッチするか判定する
  • ()(丸かっこ) = 正規表現をグループ化する

数量詞

繰り返したいパターンの直後におく

  • +(プラス) = 1回以上の繰り返し
  • *(アスタリスク) = 0回以上の繰り返し
  • ?(クエスチョンマーク) = 入力なしか1文字のみ
  • {n} = n回の繰り返し
  • {n, } = n回以上の繰り返し
  • {n, m} = n回以上, m回以下の繰り返し

一致方法

  • 最長一致(デフォルト)
  • 最短一致
    • ?を数量詞の最後につける

区切り

  • ^ = カバーする範囲の先頭を行頭に指定
  • $ = カバーする範囲の最後を行末に指定
  • \b = スペースや改行による単語の区切り 前後につけて単語を見つける
  • \B = \b以外の区切り 単語の中の文字列を見つける

1文字のメタ文字では機能が逆になる

ショートコード

  • [0-9] = \d
  • [^0-9] = \D
  • [a-zA-Z0-9_] = \w
  • [^a-zA-Z0-9_] = \W
  • \n = 改行
  • \t = タブ
  • \r = リターン
  • \f = 改ページ
  • [\n\t\r\f ] = \s
  • [^\n\t\r\f ] = \S

修飾子

  • g(global) = マッチする結果すべてを抽出
  • i(case-insensitive) = 大文字と小文字を区別しない
  • m(multiline) = ^と$の挙動を変え, 複数行を対象にする

日本語

  • ひらがな
    • [ぁ-ん]
    • [\u3041-\u3096]
    • [\x{3041}-\x{3096}]
  • カタカナ
    • [ァ-ヶ]
    • [\u30A1-\u30FA]
    • [\x{30A1}-\x{30FA}]
  • 漢字
    • [亜-煕]
    • [々〇〻\u3400-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF]
    • [々〇〻\x{3400}-\x{9FFF}\x{F900}-\x{FAFF}]|[\x{D840}-\x{D87F}][\x{DC00}-\x{DFFF}]
  • 半角文字以外
    • [^\x01-\x7E]

応用

  • フリーダイヤル
    • /0120-((\d{2}-\d{4})|(\d{3}-\d{3}))/
  • 市街局番
    • /\d{2, 4}-\d{2, 4}-\d{4}/
  • 携帯番号
    • /(090|080|070)-\d{4}-\d{4}/
  • URL
    • /http[s]?:\/\/[\w/%&$#?()=~+-]+/
  • メールアドレス
    • /[\w-]+@([/w-]+.)+[a-zA-Z]{2, }

感想

とりあえず正規表現が使えそうだったらこのページを参考に書いてみようと思う.