🐡

正規表現の基本

2024/06/28に公開

はじめに

このページでは正規表現について記述します。

正規表現の基本

1. リテラル文字

特定の文字列に一致させる基本的なパターンです。

abc

これは"abc"という文字列に一致します。

2. メタ文字

メタ文字は特別な意味を持つ文字です。以下にいくつかの例を示します。

任意の一文字: .

a.c

これは"a"に続く任意の一文字とその後に"c"が続くパターンに一致します。

文字クラス: []

[abc]

これは"a"、"b"、または"c"のいずれか一文字に一致します。

否定文字クラス: [^]

[^abc]

これは"a"、"b"、または"c"以外の任意の一文字に一致します。

3. 量指定子

量指定子は直前の要素の繰り返し回数を指定します。

0回以上: *

a*

これは"a"が0回以上繰り返されるパターンに一致します。

1回以上: +

a+

これは"a"が1回以上繰り返されるパターンに一致します。

0回または1回: ?

a?

これは"a"が0回または1回繰り返されるパターンに一致します。

特定の回数: {n}

a{3}

これは"a"がちょうど3回繰り返されるパターンに一致します。

範囲指定: {n,m}

a{2,4}

これは"a"が2回から4回繰り返されるパターンに一致します。

4. アンカー

アンカーは文字列内の特定の位置に一致させます。

行の先頭: ^

^abc

これは行の先頭に"abc"がある場合に一致します。

行の末尾: $

abc$

これは行の末尾に"abc"がある場合に一致します。

5. 文字境界

文字境界は単語の境界に一致させます。

単語の境界: \b

\bword\b

これは"word"が単語全体として現れる場合に一致します。

非単語境界: \B

\Bword\B

これは"word"が単語全体として現れない場合に一致します。

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

グループ化とキャプチャは部分文字列をグループ化し、後で参照できるようにします。

グループ化: ()

(a|b|c)

これは"a"、"b"、または"c"のいずれかに一致します。

非キャプチャグループ: (?:)

(?:a|b|c)

これはキャプチャされない"a"、"b"、または"c"のいずれかに一致します。

7. 参照

キャプチャしたグループは後で参照できます。

後方参照: \1, \2, ...

(\d+)\s\1

これは一つ以上の数字がスペースを挟んで同じ数字の並びで繰り返されるパターンに一致します。例えば"123 123"。

8. 先読みと後読み

先読みと後読みは、指定したパターンの前または後の部分に一致させますが、実際のマッチには含まれません。

ポジティブ先読み: (?=...)

a(?=b)

これは"a"に続いて"b"がある場合に"a"に一致します。

ネガティブ先読み: (?!...)

a(?!b)

これは"a"に続いて"b"がない場合に"a"に一致します。

ポジティブ後読み: (?<=...)

(?<=a)b

これは"a"の後に続く"b"に一致します。

ネガティブ後読み: (?<!...)

(?<!a)b

これは"a"の後に続かない"b"に一致します。

正規表現の具体例

メールアドレスの検証

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

これは典型的なメールアドレスの形式に一致します。

電話番号の形式

日本の電話番号

\d{2,4}-\d{2,4}-\d{4}

これは日本の一般的な電話番号形式に一致します。

URLの検証

https?:\/\/(www\.)?[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(:\d+)?(\/[a-zA-Z0-9._%+-]*)*

これはHTTPまたはHTTPSのURLに一致します。

日付の検証(YYYY-MM-DD形式)

\d{4}-\d{2}-\d{2}

これはYYYY-MM-DD形式の日付に一致します。

HTMLタグの検出

<[^>]+>

これはHTMLタグに一致します。

IPアドレスの検証(IPv4)

\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b

これはIPv4形式のIPアドレスに一致します。

まとめ

正規表現は、文字列操作において非常に強力で柔軟なツールです。基本的な構文から応用的なパターンまでを理解し、適切に使用することで、効率的なデータ処理が可能になります。正規表現の詳細なリファレンスや公式ドキュメントを参考にしながら、実際のプロジェクトで活用してみてください。

参照URL:

Discussion