6
8

More than 3 years have passed since last update.

【メモ】いまさら正規表現入門

Last updated at Posted at 2019-11-11

はじめに

「正規表現ってちょっと難しそうだからまた今度勉強しよう・・・」って先延ばしにしていたら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番目の文字列

参考にした記事

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8