ホームページ >バックエンド開発 >PHPチュートリアル >PHP正規表現入門チュートリアル

PHP正規表現入門チュートリアル

WBOY
WBOYオリジナル
2023-06-23 12:46:491577ブラウズ

Web サイトやアプリケーションを開発するとき、多くの場合、テキストを処理する必要があります。検索と置換、インターセプトなどの単純な文字列操作だけであれば、いくつかの組み込み関数を使用してそれを完了できる場合もあります。ただし、より複雑なパターン マッチングやデータ抽出を実行する必要がある場合は、正規表現を使用する必要があります。

正規表現は、テキスト データを処理するための強力なツールです。これは、特定の記号とルールを通じて文字列を照合および処理するのに役立ちます。 PHP には正規表現が組み込まれており、PCRE ライブラリ (Perl 互換正規表現) を使用して照合を行うことができます。

この記事では、初心者がすぐに使い始めてこの強力なツールを習得できるように、PHP 正規表現の基本的な構文と使用法を紹介します。

  1. 基本構文

正規表現は、一致するパターンを記述するいくつかの特定の文字とルールで構成されます。 PHP では、正規表現をスラッシュ (/) で囲む必要があります。例:

$pattern = "/hello world/i";

この正規表現は、文字列内の「hello world」と一致するために使用され、大文字と小文字は区別されません。

このうち、「/」は正規表現の先頭と末尾を表し、真ん中が照合対象のパターンとなります。この例では、大文字と小文字を区別するために「i」修飾子を使用しました。修飾子はスラッシュの外側にあり、正規表現の一致動作を変更するために使用されます。一般的な修飾子は次のとおりです。

#xxx正規表現内のスペースとコメントを無視する
Modifier Description
i 大文字と小文字を無視する
m 文字列を複数行として扱う
s ドットと一致する(.) 改行を含むすべての文字
    文字セット
正規表現では、文字セットを使用して特定の文字セットと一致させることができます。文字セットは角括弧 ([]) で囲む必要があります。例:

$pattern = "/[aeiou]/i";

この正規表現は、大文字と小文字を区別せずに、文字列内の任意の母音と一致するために使用されます。

角括弧内には、一致する文字をカンマ (,) で区切ってリストします。ダッシュ (-) を使用して範囲を示すことができます。例:

$pattern = "/[a-z]/i";

この正規表現は、大文字と小文字を無視して、任意の小文字と一致するために使用されます。

一部の特殊なメタ文字は、特定の文字セットを表すために角括弧内で使用することもできます。例:

MetaCharacterDescriptiond任意の数値と一致します D 任意の非数値と一致します w 任意の文字、数字と一致しますまたはアンダースコアW文字、数字、またはアンダースコア以外の任意の文字と一致しますs#S空白以外の任意の文字と一致数量子
# #Match任意の空白文字 (スペース、タブ、改行など)
  1. 正規表現では、数量子を使用して、特定の要素の一致数を示すことができます。一般的な数量指定子は次のとおりです:

QuantifierDescription#| Match 0
    | 1 つ以上の
  • ? に一致 | 0 または 1 つの
  • {n} | 正確に n に一致
  • {n,} | 少なくとも n の
    {n, m} | n を m に一致させる


    例:
  • $pattern = "/a+/i";
この正規表現は、大文字と小文字を区別せず、文字列内の 1 つ以上の文字「A」と一致するために使用されます。

$pattern = "/d{3,}/";

この正規表現は、少なくとも 3 桁の文字列と一致するために使用されます。

境界マッチング

  1. 正規表現では、境界マッチングはマッチングの範囲を制限するために使用されます。一般的な境界一致は次のとおりです:

#一致記号説明文字列の先頭と一致します文字列の末尾と一致します単語境界の一致単語境界以外の位置の一致
$
B

例如:

$pattern = "/^hello/i";

这个正则表达式用于匹配以“hello”开头的字符串,忽略大小写。

$pattern = "/world$/i";

这个正则表达式用于匹配以“world”结尾的字符串,忽略大小写。

$pattern = "/hello/i";

这个正则表达式用于匹配单词“hello”,忽略大小写。

  1. 捕获分组

在正则表达式中,我们可以使用捕获分组来提取匹配的内容。捕获分组需要使用圆括号(())将要捕获的内容包裹起来。例如:

$pattern = "/(d{3})-(d{4})/";
$string = "my phone number is 123-4567";
if(preg_match($pattern, $string, $matches)){
    echo $matches[0]; // 123-4567
    echo $matches[1]; // 123
    echo $matches[2]; // 4567
}

这个正则表达式用于匹配“123-4567”这种形式的电话号码,并且将前三个数字和后四个数字分别保存到$matches数组中。

  1. 贪婪匹配和非贪婪匹配

在正则表达式中,默认情况下会进行贪婪匹配。也就是说,它会尽可能多地匹配字符。例如:

$pattern = "/.*hello/";
$string = "my name is hello, nice to meet you";
if(preg_match($pattern, $string, $matches)){
    echo $matches[0]; // my name is hello
}

这个正则表达式用于匹配字符串中的“hello”之前的所有字符。

如果我们想进行非贪婪匹配,也就是尽可能少地匹配字符,可以在量词后面添加一个问号(?)来实现。例如:

$pattern = "/.*?hello/";
$string = "my name is hello, nice to meet you";
if(preg_match($pattern, $string, $matches)){
    echo $matches[0]; // my name is 
}

这个正则表达式也用于匹配字符串中的“hello”之前的所有字符,但是它只匹配到了“my name is”。

  1. 其他函数

除了preg_match()函数之外,PHP中还提供了其他一些正则表达式相关的函数,例如:

函数 描述
preg_match_all() 用于匹配所有符合正则表达式的结果
preg_replace() 用于替换符合正则表达式的字符串
preg_split() 用于按照正则表达式将字符串分割成数组

例如:

$pattern = "/d+/";
$string = "I have 123 apples and 456 bananas";
$result = preg_match_all($pattern, $string, $matches);
print_r($matches);

$result = preg_replace($pattern, "***", $string);
echo $result;

$result = preg_split($pattern, $string);
print_r($result);

这段代码分别演示了匹配所有数字、替换所有数字、以数字为分隔符将字符串分割成数组的操作。

总结

本文介绍了PHP正则表达式的基本语法和用法,包括字符集、量词、边界匹配、捕获分组、贪婪匹配和非贪婪匹配等内容。正则表达式是一种非常强大的工具,掌握它可以让我们在处理文本时事半功倍。希望本文能够帮助读者快速入门并掌握PHP正则表达式的基本用法。

以上がPHP正規表現入門チュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。