トップページ > コンテンツ > プログラミング入門 > 言語共通系 > 正規表現の書き方

ここでは一般的な正規表現の書き方について記述する。
言語によって、多少差異があるので注意すること。
正規表現の一部取得等については後方参照も参考にしたい。

正規表現で登場する記号

. 何でも良いから1文字
^ 行の先頭に始まる文字が^の後に続く文字になっているもの
$ 行の終わりの文字が$の前の文字がなっているもの
* 直前の文字が無いか、直前の文字が1文字以上続くか。a*としたら無しか、a,aa,aaa等。
+ 直前の文字が1回以上続くか。a+としたらa,aa,aaa等
? 直前の文字が1回あるかそれともないか。最大でも1回のみの繰り返しという意味で*や+と異なる。
正規表現の繰り返し検索に関しては、一番左から一番右にかけてもっとも長い範囲で一致するものを検索するため、この?をつけて一番最初にマッチした所で終了させることも多い
{m,n} 直前のパターンのm回からn回の間での繰り返し
.* 何でも良い文字が続くということで、いわゆるワイルドカード
いずれかの文字。orの意味
[] 囲った文字のうちいずれかと一致。AからZまでのときは[A-Z]。[]内の^は以外でnotの意味
[^] 囲った文字以外の意味。文字クラスの[]と組み合わせることで、^が否定の意味になる
\w 英数字とアンダーバー
\s 空白文字
\d 数字[0-9]と同じ
\n 改行
g 繰り返し正規表現を実施する
\1,\2 後方参照。()でグループ化された正規表現にヒットしたものを格納する。
\1なら1個目のグループの正規表現にヒットしたもの。\2なら2個目。

■よく使いそうなパターン集
任意の英数文字列(_含む) [a-zA-Z0-9_]*
空行(頭と終わりの間に何もない) ^$
文字前の空白 ^[ ]*
文字後の空白 [ ]*$

POSIX文字列クラス

[]で囲った文字列クラスに、さらに[:クラス名:]とすることで文字集合を表現できる。うまく使うと正規表現の利用の幅が広がるかもしれないので、頻度が高そうなものだけ紹介。
[[:alnum:]] 任意の英数字
[[:alpha:]] 任意の英字
[[:blank:]] 任意の空白文字
[[:digit:]] 任意の数値
[[:punct:]] 任意の記号
[[:space:]] タブや空白等のスペース

※さらに見たい場合は、こちら参照。

最終更新:2019年03月09日 21:32