正規表現の演習

正規表現は文字列を検索したり、置換したりするのに便利なツールです。
正規表現は使えたらとても便利そうだなと感じるけど・・
覚えるのが面倒・・
扱えるか不安・・
等々あるかと思います!

そこで今回は一緒に正規表現について考えてみましょう!

正規表現を以前特別編>特別講義内で紹介しています。
2021/12/13 正規表現の基礎について

WordPressで正規表現を使うことってある?

WordPressで正規表現を使うことはあります。
正規表現は、文字列を検索したり、置換したりするのに便利なツールです。

特別講義内でもメリットとして

  • 電話番号や郵便番号やメールアドレスをパターンでチェックできる
  • プログラムでチェックするコードを簡単にかける
  • 複数の箇所をまとめて置換する際に利用できる

と記されているように、便利です。
具体的にWordPressでは、正規表現を使って、以下のことができます。

  • 記事や固定ページのコンテンツ、素材を検索したり、置換したりする(「Search Regex」プラグインを使用)
  • ユーザー名やパスワードを検証する
  • メールアドレスやURLを検証する
  • ハッシュ化されたパスワードを復号する
  • XMLやJSONなどのデータを処理する

等です。例えば、記事の本文から特定の文字列を削除したい場合、次のコードのように正規表現を使って削除することができます。

add_filter('the_content', 'remove_string');

function remove_string($content) {
    return preg_replace('/^この文字列は削除したい/', '', $content);
}

このコードを追加すると、記事の本文の最初に「この文字列は削除したい」という文字列が含まれている場合、その文字列が削除されます。

また、ユーザー登録時に入力されたユーザー名やパスワードが有効かどうかを検証したい場合、次のコードのように正規表現を使って検証することができます。

function validate_username($username) {
    $regex = '/^[a-zA-Z0-9_]{3,20}$/';

    if (!preg_match($regex, $username)) {
        return false;
    }

    return true;
}

このコードは、ユーザー名が3文字以上20文字以下で、英字、数字、アンダースコアのみで構成されているかどうかを検証しています。

このように、WordPressで正規表現を使うことで、さまざまな機能をカスタマイズしたり、機能を拡張したりすることができます。

正規表現の基本パターン

正規表現の基本的なパターンを理解することで、より正確で効率的に文字列を処理することができます。ここでは、正規表現の基本的なパターンをいくつか紹介します。

  • 文字

正規表現では、文字はそのまま文字列と一致します。例えば、次の正規表現は、文字列「a」と一致します。

  • メタ文字

正規表現にはメタ文字と呼ばれる特別な文字があります。
例えば、「.」 は任意の一文字にマッチし、「*」 は直前のパターンが0回以上繰り返されることを示します。

  • 文字クラス

文字クラスは、特定の文字の集合を表します。[ ] 内に文字を列挙することで、その中の任意の一文字にマッチするパターンを作成できます。
例えば、次の正規表現は、英字と数字のいずれかの文字と一致します。

[ ] 内でハイフンを使用すると、文字の範囲を指定できます。例えば、[a-z] は小文字のアルファベット文字にマッチします。

[a-zA-Z0-9]
  • 否定

^ を文字クラス内で使用すると、その文字クラスの否定を示し、クラスに含まれない文字にマッチします。例えば、[^0-9] は数字以外の文字にマッチします。

  • 量指定子

量指定子は、文字または文字クラスの出現回数を指定します。{n} は直前のパターンがちょうど n 回繰り返されることを示し、{m, n} は m 回以上、n 回以下の繰り返しにマッチします。
例えば、次の正規表現は、英字の文字列が1回以上出現する文字列と一致します。

[a-zA-Z]+
  • 特殊文字

特殊文字は、正規表現で特別な意味を持つ文字です。
例えば、次の正規表現は、行頭で始まる文字列と一致します。

^
  • 特殊文字のエスケープ

特殊文字のエスケープ(エスケープシーケンス)は、特殊文字(例: .*)を文字として扱うために使用します。
例えば、次の正規表現は、文字列「@」と一致します。

\@

正規表現のパターンは、組み合わせて複雑なパターンを作成することができます。例えば、次の正規表現は、3文字以上の英字と数字の文字列と一致します。

[a-zA-Z0-9]{3,}

正規表現は、覚えることがたくさんありますが、慣れれば非常に便利なツールとなります。ぜひ、基本的なパターンを覚えて、正規表現を使いこなしましょう。

正規表現練習

対話型AIで、正規表現の練習課題をいくつかのパターンで出してもらいました!
特別講義でも案内のあった自作の正規表現を分かりやすく可視化してくれるチェックツール(https://regexper.com/)を利用して正しく書けているかを確認するのも良いですね!

課題 1: 電話番号の抽出
与えられたテキストから電話番号を抽出してください。電話番号は以下のフォーマットであるとします:xxx-xxxx-xxxx(xは数字)。

例:
テキスト: “私の連絡先は090-1234-5678です。”
抽出結果: “090-1234-5678”

課題 1: 電話番号の抽出
正規表現パターン: \d{3}-\d{4}-\d{4}
このパターンは、3桁の数字、ハイフン、4桁の数字、ハイフン、4桁の数字という形式の電話番号を抽出します。\dは数字にマッチする特殊文字であり、{n}は直前の文字やグループがn回繰り返されることを示します。

課題 2: メールアドレスの抽出
与えられたテキストからメールアドレスを抽出してください。

例:
テキスト: “お問い合わせはinfo@example.comまでどうぞ。”
抽出結果: “info@example.com”

課題 2: メールアドレスの抽出
正規表現パターン: [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
このパターンは、一般的なメールアドレスを抽出します。最初の部分 [a-zA-Z0-9._%+-]+ はメールアドレスのローカルパートを示し、@ はその後に続くドメイン名と区切ります。ドメイン名は [a-zA-Z0-9.-]+\.[a-zA-Z]{2,} の部分でマッチングされます。

課題 3: 日付の抽出
与えられたテキストから日付を抽出してください。日付は以下のフォーマットであるとします:YYYY/MM/DD。

例:
テキスト: “イベントは2023/08/15に開催されます。”
抽出結果: “2023/08/15”

課題 3: 日付の抽出
正規表現パターン: \d{4}\/\d{2}\/\d{2}
このパターンは、4桁の数字、スラッシュ、2桁の数字、スラッシュ、2桁の数字という形式の日付を抽出します。\dは数字にマッチする特殊文字であり、{n}は直前の文字やグループがn回繰り返されることを示します。正規表現内のスラッシュ / はエスケープする必要があるため、バックスラッシュ \ で前に付けます。これにより、正規表現エンジンが / を特別な意味ではなく文字として解釈します。

課題 4: URLの抽出
与えられたテキストからURLを抽出してください。

例:
テキスト: “ウェブサイトはhttps://www.example.comです。詳細はこちらをご覧ください。”
抽出結果: “https://www.example.com”

課題 4: URLの抽出
正規表現パターン: https?:\/\/\S+
このパターンは、httpまたはhttpsで始まり、その後に任意の非空白文字が続くURLを抽出します。https?はhttpまたはhttpsにマッチし、\S+は非空白文字の連続にマッチします。課題3と同じく、正規表現内のスラッシュ / はエスケープする必要があるため、バックスラッシュ \ で前に付けます。また、コロン : もエスケープします。

課題 5: HTMLタグの抽出
与えられたテキストからHTMLタグを抽出してください。

例:
テキスト

"<p>このテキストは段落です。</p><a href='https://www.example.com'>リンク</a>"

抽出結果

"<p>", "</p>", "<a href='https://www.example.com'>", "</a>"
課題 5: HTMLタグの抽出
正規表現パターン: <[^>]+>
このパターンは、< で始まり、> で終わるHTMLタグを抽出します。[^>]+ は > 以外の文字の連続にマッチします。

これらの課題を通じて正規表現の練習をしてみてください。
追加で必要であれば、AIで問題を出してもらっちゃいましょう!

コメントする

上部へスクロール