1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初めに

初めて正規表現を書こうと思ったので、大まかな書き方をまとめておく。
C++での書き方はまた次回。

正規表現とは

正規表現(せいきひょうげん、英: regular expression)は、文字列の集合を一つの文字列で表現する方法の一つ。
wikipediaより

今回はPerl系で用いられている記法も含まれる

記法

.

任意の一文字にマッチする

.a <- aa,na など

*

指定したパターンが0回以上繰り返されている場合にマッチする

a* <- 空文字、a,aa,など

?を用いると最も短いものにマッチする

a*? <- 空文字

+

指定したパターンが1回以上繰り返されている場合にマッチする

a+ <- a,aa,aaaaaなど

?を後ろにつけると最小の場合にマッチする

a+? <- a

{}

繰り返しの回数を指定する
最大回数は省略可能、
最小回数は省略不可

a{1,5} <- aが1回以上5回以下繰り返される
a{1,} <- aが1回以上繰り返される
a{0,5} <- aが5回以下繰り返されている

?を後ろにつけると最小の場合にマッチする

a{1,5}? <- a

?

指定したパターンが0回または1回繰り返されている場合にマッチする

ba? b,ba

^

行頭が指定したパターンの場合にマッチする

^h <- h,ht,hogeなど

$

末尾が指定したパターンの場合にマッチする

e$ <- e, se,hogeなど 

()

文字列をグループ化する

(hoge)

\1\4でグループ化したものにキャプチャできる

(.)hoge\1 <- ahogea,hhogehなど

(?:hoge)のように?:から始まるものにはキャプチャされない

[]

指定した文字にマッチする

[a-d] <- a,b,c,d
[agh] <- a,g,h

^で指定した文字以外にマッチする

[^a-d]<- a,b,c,d以外

|

左右どちらかのパターンがマッチした文字列にマッチする

a|b <- a,b

エスケープシーケンス

記法で紹介した文字と、\\でエスケープできる。
ほかにも既定のエスケープシーケンスが存在する。

\d

[0-9]にマッチする

\w

[a-zA-Z_0-9]にマッチする

\s

空白文字にマッチする

\D\W\Sは対応する小文字以外にマッチする。


メールアドレス

メールアドレスの正規表現は複数種類ある。
今回は

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}

について解説

  1. [a-zA-Z0-9._%+-]+
    -> ユーザー名に一致
    [\w.%+-]と同じ
    これらの文字が1回以上繰り返されてる

  2. @
    ユーザー名とドメイン名との間の@

  3. [[a-zA-Z0-9.-]]+
    -> ドメインのはじめの部分gmail,outlookなど

  4. \.
    .に一致

  5. [a-zA-Z]{2,}
    comioなどドメインに一致

このように、文字列を比較、分類できる。

よくある間違い

  • . は「改行文字」にはマッチしない(re.DOTALLオプションでマッチ可能)
  • *+ は「貪欲(greedy)」マッチ。?を付けないと想定以上にマッチしてしまう

終わりに

意外と単純で便利。

~Thank you for reading~

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?