ホームページ  >  記事  >  バックエンド開発  >  php: preg_match と preg_match_all の使用例の比較

php: preg_match と preg_match_all の使用例の比較

伊谢尔伦
伊谢尔伦オリジナル
2017-06-24 15:35:331746ブラウズ

PHP での正規表現の応用

PHP アプリケーションでは、正規表現は主に次の目的で使用されます:
•正規一致: 正規表現に基づいて対応するコンテンツを一致させる
•正規置換: 正規表現に基づいてコンテンツを一致させるそして replace
• 正規分割: 文字列を正規表現に従って分割します
PHP には 2 種類の正規表現関数があり、1 つは Perl 互換の正規表現関数、もう 1 つは POSIX 拡張正規表現関数です。両者に大きな違いはなく、Perl 互換の正規表現関数を使用することをお勧めします。そのため、以下では例として Perl 互換の正規表現関数を使用します。
デリミタ
Perl互換モードの正規表現関数では、その正規表現をデリミタ内に記述する必要があります。文字、数字、バックスラッシュ () 以外の任意の文字を区切り文字として使用できます。通常は / を区切り文字として使用します。具体的な使用方法については、以下の例を参照してください。
ヒント
正規表現は非常に強力ですが、通常の文字列処理関数で完了できる場合は、正規表現関数を使用しないようにしてください。正規表現の効率が大幅に低下するためです。通常の文字列処理関数について。
preg_match()
preg_match() 関数は正規表現のマッチングに使用され、成功した場合は 1 を返し、それ以外の場合は 0 を返します。
構文:
int preg_match( string pattern, string subject [, arraymatches ] )
パラメータの説明:

パラメータ 説明
パターン 正規表現
subject 取得した
matches と一致する必要があるオブジェクト。オプションで、一致結果を格納する配列$matches[0]には、パターン全体に一致するテキスト$matches[が含まれます。 1] には、最初にキャプチャされた括弧内のサブパターンに一致するテキストなどが含まれます。

例 1:

<?php
if(preg_match("/php/i", "PHP is the web scripting language of choice.", $matches)){
    print "A match was found:". $matches[0];
} else {
    print "A match was not found.";
}
?>

ブラウザ出力:

A match was found: PHP

この例では、i を使用しているため、修飾子を使用すると、大文字と小文字を区別せずに PHP 内のテキストと一致します。
ヒント
preg_match() は、最初に一致が成功した後に照合を停止します。すべての結果を照合する場合、つまり、件名の最後まで検索する場合は、preg_match_all() 関数を使用する必要があります。
例 2、URL からホスト ドメイン名を取得します:

<?php
// 从 URL 中取得主机名
preg_match("/^(http://)?([^/]+)/i","http://www.php.cn/index.html", $matches);
$host = $matches[2];
// 从主机名中取得后面两段
preg_match("/[^./]+.[^./]+$/", $host, $matches);
echo "域名为:{$matches[0]}";
?>

ブラウザ出力:

ドメイン名は次のとおりです: php.cn


preg_match_all()
preg _match_all () function 正規表現のグローバル マッチングの場合、パターン全体が正常に一致した回数 (おそらくゼロ) が返され、エラーが発生した場合は FALSE が返されます。
構文:
int preg_match_all( string pattern, string subject, arraymatches [, int flags ] )
パラメータの説明:

パターン件名matchesflagsオプションで、一致結果が一致に配置される順序を指定します使用可能なフラグは次のとおりです: 次の例は、すべての e03b848252eb9375d56be284e690e873bc5574f69a0cba105bc93bd3dc13c4ec が返されることを示しています。本文中のタグ キーワード(php)は赤字で表示されます。
パラメータ
正規表現の式
一致して取得する必要があるオブジェクト
一致結果を格納する配列

    PREG_PATTERN_ORDER: デフォルトでは、$matches[0] がすべてのパターン一致の配列、$matches[1] がサブパターンと一致する文字列の配列になるようにソートされます。最初の括弧の類似点
  1. PREG_SET_ORDER: $matches[0] が最初の一致セットの配列、$matches[1] が 2 番目の一致セットの配列になるように結果を並べ替えます
  2. PREG_OFFSET_CAPTURE: 固定テキスト タグが設定されている場合、一致する結果が出現するたびに、それに関連付けられた文字列オフセットも返されます


<?php
$str = "<pre class="brush:php;toolbar:false">学习php是一件快乐的事。
所有的phper需要共同努力!
"; $kw = "php"; preg_match_all('/
([sS]*?)
/',$str,$mat); for($i=0;$i'.$kw.'', $mat[0][$i]); $str = str_replace($mat[1][$i], $mat[0][$i], $str); } echo $str; ?>

通常の一致する中国語の文字

通常の一致する中国語の文字は、ページのエンコーディングによって若干異なります:
•GBK/GB2312 エンコーディング: [x80-xff>]+ または [xa1-xff]+
•UTF-8 エンコード: [x{4e00}-x{9fa5}]+/u

例:

<?php
$str = "学习php是一件快乐的事。";
preg_match_all("/[x80-xff]+/", $str, $match);
//UTF-8 使用:
//preg_match_all("/[x{4e00}-x{9fa5}]+/u", $str, $match);
print_r($match);
?>

出力:

Array
(
    [0] => Array
        (
            [0] => 学习
            [1] => 是一件快乐的事。
        )
)

以上がphp: preg_match と preg_match_all の使用例の比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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