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, }
感想
とりあえず正規表現が使えそうだったらこのページを参考に書いてみようと思う.