正規表現とサンプル
正規表現についてまとめてみました
正規表現とは
正規表現(regular expression)とは、文字列のパターンを記述するための言語です。また、この言語で記述されたパターンも正規表現と呼びます。正規表現を用いると、文字列が指定したパターンを含んでいるかどうかを判定し、また含んでいるならばそれが文字列中のどの場所であるかを知ることができます。さらに文字列を置換することができます。
メタ文字
メタ文字は、正規表現において特別な意味を持つ文字です。
.
: 任意の1文字にマッチします。
例:a.c
はabc
,a9c
などにマッチします。^
: 行の先頭にマッチします。
例:^ab
は行の先頭にab
がある場合にマッチします。$
: 行の末尾にマッチします。
例:bc$
は行の末尾にbc
がある場合にマッチします。\
: エスケープ文字として使用され、メタ文字を通常の文字として扱います。
例:\.
はドット文字にマッチします。*
: 直前のパターンを0回以上繰り返します。
例:ab*c
はac
,abc
,abbbbc
などにマッチします。+
: 直前のパターンを1回以上繰り返します。
例:ab+c
はabc
,abbbbc
などにマッチしますがac
にはマッチしません。?
: 直前のパターンを0回または1回繰り返します。
例:ab?c
はac
,abc
にマッチします。{n}
: 直前のパターンをn回繰り返します。
例:a{
は2
}aa
にマッチします。{n,}
: 直前のパターンをn回以上繰り返します。
例:a{2,}
はaa
,aaa
などにマッチします。{n,m}
: 直前のパターンをn回以上m回以下繰り返します。
例:a{2,4}
はaa
,aaa
,aaaa
にマッチします。
エスケープ
エスケープは、メタ文字を通常の文字として扱うために使用します。
\.
: ドット文字にマッチします。
例:a\.c
はa.c
にマッチします。\\
: バックスラッシュにマッチします。
例:a\\b
はa\b
にマッチします。
文字クラス
文字クラスは、角括弧内の任意の1文字にマッチします。
[abc]
: 「a」、「b」、「c」のいずれか1文字にマッチします。
例:b
にマッチしますが、d
にはマッチしません。[a-z]
: 「a」から「z」までの小文字にマッチします。
例:g
にマッチしますが、G
にはマッチしません。[^abc]
: 「a」、「b」、「c」以外の1文字にマッチします(否定)。
例:d
にマッチしますが、a
にはマッチしません。[a-z&&[^
: aからzまでのアルファベットのうち、abcを除く1文字にマッチします。abc
]]
例:
にマッチしますが、h
a
にはマッチしません。
グループ化とキャプチャグループ
グループ化は、パターンの一部を括弧で囲み、1つの単位として扱うために使用します。また、キャプチャグループは、括弧で囲まれた部分にマッチした内容を記憶します。
(abc)
: 「abc」にマッチします。
例:(abc)
に対してabc
にマッチします。(?:abc)
: 非キャプチャグループ。マッチするがキャプチャしない。
例:(?:abc)
に対してabc
にマッチしますが、キャプチャされません。(\w+)\s+(\w+)
: 2つの単語をキャプチャし、間に空白があるパターン。
例:hello world
に対してhello
とworld
をキャプチャします。
(abc|def)
: 「abc」または「def
」にマッチします。
(abc)
\1: 「abcabc」にマッチします。
特殊シーケンス
特殊シーケンスは、特定の文字クラスや位置にマッチするために使用されます。
\d
: 数字にマッチします。
例:\d
は1
,2
,3
などにマッチします。\D
: 数字以外の文字にマッチします。
例:\D
はa
,!
, などにマッチします。\w
: 単語文字(アルファベット、数字、アンダースコア)にマッチします。
例:\w
はa
,1
,_
などにマッチします。\W
: 単語文字以外の文字にマッチします。
例:\W
は!
,@
,#
などにマッチします。\s
: 空白文字にマッチします。
例:\s
は ,\t
,\n
などにマッチします。\S
: 空白文字以外の文字にマッチします。
例:\S
はa
,1
,!
などにマッチします。\b
: 単語の境界にマッチします。
例:\bword\b
はword
という単語全体にマッチします。\B
: 単語の境界以外の位置にマッチします。
例:\Bword\B
はpassword
のword
にマッチします。
修飾子一覧
/i
: 大文字と小文字を区別しない。
例: パターンabc/i
はABC
,abc
,AbC
などにマッチします。/o
: 式の展開を一度だけ行う。
例: 式展開を最初の一度だけ行います。/x
: パターンの空白やコメントを無視する。
例:a b c/x
は空白を無視してabc
にマッチします。/m
: 対象の文字列を複数行として扱う。
例:^abc/m
は複数行の文字列の各行の先頭にabc
がある場合にマッチします。
基本の文法
- リテラル: そのままの文字にマッチする文字列
例:大阪
は文字列大阪
にマッチします。 - メタ文字: 特別な働きをする文字列
例:[]
は文字クラスを示します。
文字列の置き換え
\0
: 一致した文字列全体に置換します。
例: パターン(\d+)
を使い、456
を(\0)
に置換すると(456)
になります。\1
から\9
: キャプチャグループに一致した文字列に置換します。
例: パターン(\d+)-(\d+)
を使い、789-012
を\2-\1
に置換すると012-789
になります。\l
: 次の1文字を小文字に変換します。
例:\lWORLD
はwORLD
に変換されます。\L...\E
: 挟まれた文字列を小文字に変換します。
例:\LWORLD\E
はworld
に変換されます。\u
: 次の1文字を大文字に変換します。
例:\uhello
はHello
に変換します。\U...\E
: 挟まれた文字列を大文字に変換します。
例:\Uworld\E
はWORLD
に変換されます。
サンプル
メールアドレスのバリデーション
- パターン:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
- 説明: メールアドレスの形式が正しいかをチェックします。
例:test.email@example.com
はマッチしますが、test.email@com
はマッチしません。
電話番号のフォーマット
- パターン:
^\(\d{3}\) \d{3}-\d{4}$
- 説明: アメリカの電話番号形式 (例: (123) 456-7890) をチェックします。
例:(123) 456-7890
はマッチしますが、123-456-7890
はマッチしません。
郵便番号のバリデーション(日本)
- パターン:
^\d{3}-\d{4}$
- 説明: 日本の郵便番号形式 (例: 123-4567) をチェックします。
例:123-4567
はマッチしますが、1234567
はマッチしません。
URLのバリデーション
- パターン:
^(https?|ftp)://[^\s/$.?#].[^\s]*$
- 説明: URLの形式が正しいかをチェックします。
例:http://example.com
はマッチしますが、htp://example
はマッチしません。
日付のバリデーション(YYYY-MM-DD形式)
- パターン:
^\d{4}-\d{2}-\d{2}$
- 説明: 日付がYYYY-MM-DD形式かをチェックします。
例:2023-01-01
はマッチしますが、01-01-2023
はマッチしません。
カラーのバリデーション(#RRGGBB形式)
次の正規表現パターンは、カラーの16進表記(#RRGGBB形式)をチェックするものです。
正規表現パターン: ^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$
#
: 先頭には必ず#
が来ます。([0-9a-fA-F]{2})
: 2桁の16進数文字列が3つ続きます。[0-9a-fA-F]
: これは16進数の文字を表します。0-9
は数字、a-f
は小文字の16進数、A-F
は大文字の16進数を意味します。{2}
: 各グループが2文字であることを示します。
この正規表現パターンは、例えば #aabbcc
や #FF0000
のようなカラーコードにマッチしますが、#abcdefg
や #12345
のような不正な形式にはマッチしません。
指定文字数ごとに改行 N には 数字を指定
正規表現パターン: (.{n})
置換パターン: $1\n
改行だけの行を削除
正規表現パターン: ^\r\n
置換パターン:
ディスカッション
コメント一覧
まだ、コメントがありません