はじめに
「正規表現ってちょっと難しそうだからまた今度勉強しよう・・・」って先延ばしにしていたら3ヶ月経っていた人向けの記事です。
正規表現って?
正規表現とは、
いくつかの文字列を1つの文字列で表現する方法
例えば、
090-0000-0000 // 電話番号
111-0000 // 郵便番号
こいつらは、
/\d{3}-\d{4}-\d{4}/
/\d{3}-\d{4}/
こう表せます。
ちなみに正規表現を英語にするとRegular Expression
で、しばしばregex
や regexp
と略されるそうです。
どちらが正しいのかはこちらで議論されていて、
結果的にどちらでも良いと結論づけられています。
なお、ベストアンサーは/regexp?/
です。
?
はp
の有無を両方許容すると言う意味です。
1. /<正規表現>/
正規表現を書くときは/(スラッシュ)
で囲みます。
言語によるみたいです。
2. /<正規表現>/g
文末にg
がある状態すなわち、
/<正規表現>/g
だと全ての文章からマッチするものを全て見つける。
逆にg
を付けなければはじめてマッチした時点で処理をストップする。
/<正規表現>/g?
3. \dの意味
正規表現において\d
は半角数字
を表します。
なので、
444 <=> /\d\d\d/
20191110 <=> /\d\d\d\d\d\d\d\d/
であり、
444 <=> /\d{3}/
20191110 <=> /\d{8}/
であり、
444, 20191110 <=> /\d{3,8}/
とも表せます.
4. []の意味
[AB]
の意味はAもしくはB
と言う意味です。
America, Bmerica <=> /[AB]merica/
また[a-z]
はa || b || c || ... || z
と言う意味になります。[0-9]
や[A-Z]
についても同様です。
5. 他の様々なメタ文字
メタ文字 | 意味 | 備考 |
---|---|---|
. | 任意の一文字 | |
? | 直前の文字列の有無の許容, 最短のマッチを返す | "(.*?)" |
+ | 直前の文字が1文字以上 | |
() | 括弧内がキャプチャされる, グループ化 | (?: )でキャプチャ回避 |
* | 直前の文字が0文字以上 | |
\w | [a-zA-z0-9_] | \Wは\wの否定 |
^ | 直後の文字以外, 行頭 | [^A] |
$ | 行末 | |
\t | タブ | |
\s | スペース | 環境によって意味が異なる場合がある, \Sは\sの否定 |
| | OR | (A|B) |
\n | 改行文字 | windows環境だと\r\n |
\b | 単語の境界 | \Bは\bの否定 |
(?<=) | =の直後文字列の直後の位置にマッチする | |
(?=:) | :の直後の文字列の直前の位置にマッチする | |
(?<!) | !の直後の文字列以外の直後の位置にマッチする | |
(?!) | !の直後の文字列以外の直前の位置にマッチする | |
\1 | キャプチャされた1番目の文字列 |