eightban's memo

残しておきたい記事をまとめてみました。このブログに書いてあるドキュメントやブログで配布しているファイルの使用によって発生するいかなる損害に対してもこのブログの管理者は責任を負いません。使用する場合は自己責任のもとに使用してください。

windows

正規表現とサンプル

投稿日:

正規表現についてまとめてみました

正規表現とは

正規表現(regular expression)とは、文字列のパターンを記述するための言語です。また、この言語で記述されたパターンも正規表現と呼びます。正規表現を用いると、文字列が指定したパターンを含んでいるかどうかを判定し、また含んでいるならばそれが文字列中のどの場所であるかを知ることができます。さらに文字列を置換することができます。

メタ文字

メタ文字は、正規表現において特別な意味を持つ文字です。

  • .: 任意の1文字にマッチします。
    例: a.cabc, a9c などにマッチします。
  • ^: 行の先頭にマッチします。
    例: ^ab は行の先頭に ab がある場合にマッチします。
  • $: 行の末尾にマッチします。
    例: bc$ は行の末尾に bc がある場合にマッチします。
  • \: エスケープ文字として使用され、メタ文字を通常の文字として扱います。
    例: \. はドット文字にマッチします。
  • *: 直前のパターンを0回以上繰り返します。
    例: ab*cac, abc, abbbbc などにマッチします。
  • +: 直前のパターンを1回以上繰り返します。
    例: ab+cabc, abbbbc などにマッチしますが ac にはマッチしません。
  • ?: 直前のパターンを0回または1回繰り返します。
    例: ab?cac, abc にマッチします。
  • {n}: 直前のパターンをn回繰り返します。
    例: a{2}aa にマッチします。
  • {n,}: 直前のパターンをn回以上繰り返します。
    例: a{2,}aa, aaa などにマッチします。
  • {n,m}: 直前のパターンをn回以上m回以下繰り返します。
    例: a{2,4}aa, aaa, aaaa にマッチします。

エスケープ

エスケープは、メタ文字を通常の文字として扱うために使用します。

  • \.: ドット文字にマッチします。
    例: a\.ca.c にマッチします。
  • \\: バックスラッシュにマッチします。
    例: a\\ba\b にマッチします。

文字クラス

文字クラスは、角括弧内の任意の1文字にマッチします。

  • [abc]: 「a」、「b」、「c」のいずれか1文字にマッチします。
    例: b にマッチしますが、d にはマッチしません。
  • [a-z]: 「a」から「z」までの小文字にマッチします。
    例: g にマッチしますが、G にはマッチしません。
  • [^abc]: 「a」、「b」、「c」以外の1文字にマッチします(否定)。
    例: d にマッチしますが、a にはマッチしません。
  • [a-z&&[^abc]]: aからzまでのアルファベットのうち、abcを除く1文字にマッチします。
    例: h にマッチしますが、a にはマッチしません。

グループ化とキャプチャグループ

グループ化は、パターンの一部を括弧で囲み、1つの単位として扱うために使用します。また、キャプチャグループは、括弧で囲まれた部分にマッチした内容を記憶します。

  • (abc): 「abc」にマッチします。
    例: (abc) に対して abc にマッチします。
  • (?:abc): 非キャプチャグループ。マッチするがキャプチャしない。
    例: (?:abc) に対して abc にマッチしますが、キャプチャされません。
  • (\w+)\s+(\w+): 2つの単語をキャプチャし、間に空白があるパターン。
    例: hello world に対して helloworld をキャプチャします。
  • (abc|def): 「abc」または「def」にマッチします。
  • (abc)\1: 「abcabc」にマッチします。

特殊シーケンス

特殊シーケンスは、特定の文字クラスや位置にマッチするために使用されます。

  • \d: 数字にマッチします。
    例: \d1, 2, 3 などにマッチします。
  • \D: 数字以外の文字にマッチします。
    例: \Da, !, などにマッチします。
  • \w: 単語文字(アルファベット、数字、アンダースコア)にマッチします。
    例: \wa, 1, _ などにマッチします。
  • \W: 単語文字以外の文字にマッチします。
    例: \W!, @, # などにマッチします。
  • \s: 空白文字にマッチします。
    例: \s は , \t, \n などにマッチします。
  • \S: 空白文字以外の文字にマッチします。
    例: \Sa, 1, ! などにマッチします。
  • \b: 単語の境界にマッチします。
    例: \bword\bword という単語全体にマッチします。
  • \B: 単語の境界以外の位置にマッチします。
    例: \Bword\Bpasswordword にマッチします。

修飾子一覧

  • /i: 大文字と小文字を区別しない。
    例: パターン abc/iABC, 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文字を小文字に変換します。
    例: \lWORLDwORLD に変換されます。
  • \L...\E: 挟まれた文字列を小文字に変換します。
    例: \LWORLD\Eworld に変換されます。
  • \u: 次の1文字を大文字に変換します。
    例: \uhelloHello に変換します。
  • \U...\E: 挟まれた文字列を大文字に変換します。
    例: \Uworld\EWORLD に変換されます。

サンプル

メールアドレスのバリデーション

  • パターン: ^[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 のような不正な形式にはマッチしません。

-windows

Copyright© eightban's memo , 2024 All Rights Reserved Powered by STINGER.