Web サイトやアプリケーションを開発するとき、多くの場合、テキストを処理する必要があります。検索と置換、インターセプトなどの単純な文字列操作だけであれば、いくつかの組み込み関数を使用してそれを完了できる場合もあります。ただし、より複雑なパターン マッチングやデータ抽出を実行する必要がある場合は、正規表現を使用する必要があります。
正規表現は、テキスト データを処理するための強力なツールです。これは、特定の記号とルールを通じて文字列を照合および処理するのに役立ちます。 PHP には正規表現が組み込まれており、PCRE ライブラリ (Perl 互換正規表現) を使用して照合を行うことができます。
この記事では、初心者がすぐに使い始めてこの強力なツールを習得できるように、PHP 正規表現の基本的な構文と使用法を紹介します。
正規表現は、一致するパターンを記述するいくつかの特定の文字とルールで構成されます。 PHP では、正規表現をスラッシュ (/) で囲む必要があります。例:
$pattern = "/hello world/i";
この正規表現は、文字列内の「hello world」と一致するために使用され、大文字と小文字は区別されません。
このうち、「/」は正規表現の先頭と末尾を表し、真ん中が照合対象のパターンとなります。この例では、大文字と小文字を区別するために「i」修飾子を使用しました。修飾子はスラッシュの外側にあり、正規表現の一致動作を変更するために使用されます。一般的な修飾子は次のとおりです。
Modifier | Description |
---|---|
i | 大文字と小文字を無視する |
m | 文字列を複数行として扱う |
s | ドットと一致する(.) 改行を含むすべての文字 |
正規表現内のスペースとコメントを無視する |
$pattern = "/[aeiou]/i";
$pattern = "/[a-z]/i";
Description | |
---|---|
任意の数値と一致します | |
任意の非数値と一致します | |
任意の文字、数字と一致しますまたはアンダースコア | |
文字、数字、またはアンダースコア以外の任意の文字と一致します | |
# #Match任意の空白文字 (スペース、タブ、改行など) | #S |
$pattern = "/a+/i";
$pattern = "/d{3,}/";
境界マッチング
$ | |||||||||
B | |||||||||
例如: $pattern = "/^hello/i"; ログイン後にコピー 这个正则表达式用于匹配以“hello”开头的字符串,忽略大小写。 $pattern = "/world$/i"; ログイン後にコピー 这个正则表达式用于匹配以“world”结尾的字符串,忽略大小写。 $pattern = "/hello/i"; ログイン後にコピー 这个正则表达式用于匹配单词“hello”,忽略大小写。
在正则表达式中,我们可以使用捕获分组来提取匹配的内容。捕获分组需要使用圆括号(())将要捕获的内容包裹起来。例如: $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数组中。
在正则表达式中,默认情况下会进行贪婪匹配。也就是说,它会尽可能多地匹配字符。例如: $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”。
除了preg_match()函数之外,PHP中还提供了其他一些正则表达式相关的函数,例如:
例如: $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 までご連絡ください。
著者別の最新記事
最新の問題
URL パラメータから取得した PHP 配列が期待どおりに動作しない
カテゴリ ID を含む URL パラメータがあり、それを次のような配列として扱いたいと考えています: http://example.com?cat[]=3,9,13 PHP では、...
から 2024-04-06 22:09:02
0
1
1428
戻り値の変数の形式は何ですか?
私はphpの初心者です。コードを見つけました: if($x<time()){return[false,'error'];} ロジックや変数は重要ではありませんが、[false...
から 2024-04-06 21:55:20
0
1
778
ループするために MySQL の結果を ID ごとにグループ化する
mysqlにフライトデータを含むテーブルがあります。 codeigniter3Journey_idair_idFlightDurationout_or_inflightdurati...
から 2024-04-06 17:27:56
0
1
406
関連トピック
詳細>
|