正規表現とサンプル
正規表現についてまとめてみました
正規表現とは
正規表現(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]]
例:にマッチしますが、haにはマッチしません。
グループ化とキャプチャグループ
グループ化は、パターンの一部を括弧で囲み、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
置換パターン:










ディスカッション
コメント一覧
まだ、コメントがありません