PHP - 正規表現: 初心者ガイド
こんにちは、未来のPHP魔法使いさんたち!今日は、PHPにおける正規表現の興味深い世界に飛び込みます。これまでにコードを書いたことがない方也不用担心——このエキサイティングな旅の親切なガイドとして、あなたを案内します。では、始めましょう!
正規表現とは?
PHP特有の内容に飛び込む前に、まず正規表現(regex)とは何かを理解しましょう。想像してみてください、テキストの海の中で特定のパターンを探す探偵。それが正規表現の仕事です——パターンに基づいてテキストを検索、一致、操作するのを助けます。すごいでしょう?
POSIX正規表現
POSIX(ポータブルオペレーティングシステムインターフェース)正規表現は、PHPにおける正規表現の元の標準でした。今ではあまり一般的には使用されていませんが、理解を深めることで基盤を固めることができます。
基本的なPOSIX正規表現の例
簡単な例から始めましょう:
$text = "The quick brown fox jumps over the lazy dog.";
$pattern = "/quick/";
if (ereg($pattern, $text)) {
echo "一致が見つかりました!";
} else {
echo "一致が見つかりません。";
}
この例では、文の中で「quick」という単語を探しています。ereg()
関数は、パターンがテキストのどこかに一致するかを確認します。
PHPのPOSIX正規表現関数
PHPにはいくつかのPOSIX正規表現関数が提供されています。以下は最も一般的に使用されるものの表です:
関数 | 説明 |
---|---|
ereg() | 正規表現一致 |
eregi() | 大文字小文字を区別しない正規表現一致 |
ereg_replace() | 正規表現置換 |
split() | 正規表現を使って文字列を配列に分割 |
例: eregi()を使った大文字小文字を区別しない一致
$text = "The Quick Brown Fox";
$pattern = "quick";
if (eregi($pattern, $text)) {
echo "一致が見つかりました!";
} else {
echo "一致が見つかりません。";
}
この場合、テキストの「Quick」が大文字でも一致します。
PERLスタイルの正規表現
では、より現代的で強力なPERL互換正規表現(PCRE)について話しましょう。これらは、PHPプロジェクトで最もよく使用するものです。
基本的なPCREの例
$text = "The quick brown fox jumps over the lazy dog.";
$pattern = "/quick/";
if (preg_match($pattern, $text)) {
echo "一致が見つかりました!";
} else {
echo "一致が見つかりません。";
}
これはPOSIXの例と似ていますが、preg_match()
を使っています。
PHPのPCRE関数
PCRE関数はより多様で効率的です。以下は一般的に使用されるPCRE関数の表です:
関数 | 説明 |
---|---|
preg_match() | 正規表現一致の実行 |
preg_match_all() | グローバルな正規表現一致の実行 |
preg_replace() | 正規表現検索と置換の実行 |
preg_split() | 正規表現を使って文字列を分割 |
例: preg_match_all()を使ってすべての一致を見つける
$text = "The quick brown fox jumps over the quick lazy dog.";
$pattern = "/quick/";
if (preg_match_all($pattern, $text, $matches)) {
echo "見つかった一致の数: " . count($matches[0]) . "!";
print_r($matches);
} else {
echo "一致が見つかりません。";
}
このスクリプトは、テキスト内の「quick」という単語のすべての出现を見つけて保存します。
高度なPCRE技術
基本を学んだところで、さらに高度な技術を見てみましょう。
メタキャラクター
メタキャラクターは、正規表現で特別な意味を持つ文字です。以下は一般的なものいくつかです:
-
.
: 改行を除く任意の一文字を一致 -
^
: 文字列の開始位置を一致 -
$
: 文字列の終了位置を一致 -
*
: ゼロ回以上の一致 -
+
: 一回以上の一致 -
?
: ゼロ回または一回の一致
例: メタキャラクターを使う
$text = "The quick brown fox jumps over the lazy dog.";
$pattern = "/^The/";
if (preg_match($pattern, $text)) {
echo "テキストは'The'で始まります";
} else {
echo "テキストは'The'で始まっていません";
}
このスクリプトは、テキストが「The」で始まっているか確認します。
文字クラス
文字クラスは、角括弧[]
でくくられた一組の文字のいずれかを一致させるものです。
例: 文字クラスを使う
$text = "The quick brown fox jumps over the lazy dog.";
$pattern = "/[aeiou]/i";
if (preg_match_all($pattern, $text, $matches)) {
echo "見つかった母音の数: " . count($matches[0]) . "!";
print_r($matches);
} else {
echo "母音が見つかりません。";
}
このスクリプトは、テキスト内のすべての母音を見つけます。パターンの最後の「i」は大文字小文字を区別しません。
実用的な応用
基本と高度な技術を学んだところで、実際の応用を見てみましょう。
メールアドレスの検証
$email = "[email protected]";
$pattern = "/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/";
if (preg_match($pattern, $email)) {
echo "有効なメールアドレス!";
} else {
echo "無効なメールアドレス!";
}
このスクリプトは、複雑な正規表現パターンを使ってメールアドレスを検証します。以下を確認します:
- @の前に一つ以上の文字、数字、ドット、アンダースコア、パーセント、プラス、ハイフン
- @の後ろに一つ以上の文字、数字、ドット、ハイフン
- 最後にドットと二つ以上の文字
結論
おめでとうございます!あなたは刚刚PHPにおける正規表現の世界の初歩を踏み出しました。正規表現は強力なツールですが、複雑になることもあります。鍵は練習——より多く使えば、より慣れることができます。
PHPの旅を続ける中で、フォームの検証、データのパース、テキストの操作などに正規表現が非常に役立つことを発見するでしょう。探索を続け、コードを書き続け、そして、最も重要なのは楽しむことです!
Credits: Image by storyset