ホームページ >バックエンド開発 >PHPチュートリアル >正規表現におけるパターン修飾子の役割の詳細な説明
#正規表現におけるパターン修飾子の役割の詳細な説明 (i、g、m、s、x、e)
パターン修飾子とは何ですか?
1. パターン修飾子はほんの数文字です。各正規表現で一度に 1 つまたは連続して複数使用できます。それぞれにある意味。 2. パターン修飾子は正規表現全体を調整するために使用され、正規表現関数の拡張とも言えます。 正規表現の公式を覚えていますか? '/Atoms and Metacharacters/Pattern Modifier' (スラッシュが境界文字です)。パターン修飾子の構成
パターン修飾子は文字ですが、これらはパターン修飾子の適用において特別な意味を持ちます。どのようなパターン修飾子が利用可能であるかを見てみましょう。次の表を参照してください: i は一致で大文字と小文字が区別されないことを意味するため、次の例では、実証するために、他のパターン修飾子の例を見てみましょう。1、モード修飾子 m。
コードは次のとおりです:<?php $pattern = '/^abc/m'; $string = 'bcd abc cba'; if (preg_match($pattern, $string, $arr)) { echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"; print_r($arr); } else { echo "<font color='red'>正则表达式{$pattern}和字符串{$string}匹配失败</font>"; } ?>マッチング結果は成功しました。注: パターン修飾子 m を使用すると、一致する文字列がデフォルトの単一行ではなく複数行として扱われるため、どの行でも abc で始まる限り、一致は成功します。ただし、一致する行の前にスペースがある場合は、正規表現の一致モードが変更されない限り、それらは一致しません。
2、モード修飾子。
コードは次のとおりです。<?php $pattern = '/a.*c/s'; $string = 'adsadsa c'; if (preg_match($pattern, $string, $arr)) { echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"; print_r($arr); } else { echo "<font color='red'>正则表达式{$pattern}和字符串{$string}匹配失败</font>"; } ?>今回はマッチングデメリットも成功しました。上の例でパターン修飾子 を削除すると、一致は失敗します。パターン修飾子 s は一致した文字列を単一行として扱うため、この時点ではメタキャラクター内の「.」は改行記号を表すことができます。
3、モード修飾子 x。
コードは次のとおりです。<?php $pattern = '/a c/x'; $string = 'a c'; if (preg_match($pattern, $string, $arr)) { echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"; print_r($arr); } else { echo "<font color='red'>正则表达式{$pattern}和字符串{$string}匹配失败</font>"; } ?>今回のマッチング結果は失敗しました。パターン内のスペースをキャンセルするためにパターン修飾子 x を使用したためです。注: \s で表される空白をキャンセルするためにパターン修飾子を使用することはできません。
4、モード修飾子 A。
コードは次のとおりです。<?php $pattern = '/ac/A'; $string = 'acahgyghvbm'; if (preg_match($pattern, $string, $arr)) { echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"; print_r($arr); } else { echo "<font color='red'>正则表达式{$pattern}和字符串{$string}匹配失败</font>"; } ?>正規表現の意味は、ac で始まる文字列と一致することであり、結果は成功します。 パターン修飾子 Z は、文字列で終わる一致を表します。使用法は A と同じです。再度説明しません。
5、モード修飾子 U。
このパターン修飾子は非常に重要です! 正規表現では、それ自体が「貪欲」です。それでは、貪欲モードとは何ですか? 貪欲モードとは、デフォルトで、正規表現が最初の一致を見つけた後、引き続きその後の一致を試行することを意味します。一致が見つかった場合は、最大範囲の文字列と一致します。ただし、これが望ましい結果ではない場合があるため、貪欲モードをキャンセルする必要があります。 まず貪欲モードの例を見てみましょう: コードは次のとおりです:<?php $pattern = '/<b>.*<\/b>/'; $string = '<b>welcome</b> <b>to</b> <b>phpfuns</b>'; if (preg_match($pattern, $string, $arr)) { echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"; print_r($arr); } else { echo "<font color='red'>正则表达式{$pattern}和字符串{$string}匹配失败</font>"; } ?>この例の本来の目的は welcome に一致することですが、結果は次のようになります。 welcome to phpfuns 文字列の文字全体と一致する (文字列「welcome to phpfuns」、その先頭と末尾が正規表現のパターン マッチングを正確に構成しているため、一致は成功することに注意してください)。これは、正規表現の貪欲モードです。表現。もちろん、これは私たちが望む結果ではありません。
貪欲モードをキャンセルする
パターン修飾子 U とメタキャラクター ? を使用して、2 つの方法で正規表現の貪欲モードをキャンセルできます。 モード修飾子 U は貪欲モードをキャンセルします コードは次のとおりです:<?php $pattern = '/<b>.*<\/b>/U'; $string = '<b>welcome</b> <b>to</b> <b>phpfuns</b>'; if (preg_match($pattern, $string, $arr)) { echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"; print_r($arr); } else { echo "<font color='red'>正则表达式{$pattern}和字符串{$string}匹配失败</font>"; } ?>
Metacharacter? 貪欲モードをキャンセルします
コードは次のとおりです:は次のとおりです:<?php $pattern = '/<b>.*?<\/b>/'; $string = '<b>welcome</b> <b>to</b> <b>phpfuns</b>dsadsadas'; if (preg_match($pattern, $string, $arr)) { echo "正则表达式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>"; print_r($arr); } else { echo "<font color='red'>正则表达式{$pattern}和字符串{$string}匹配失败</font>"; } ?>
以上が正規表現におけるパターン修飾子の役割の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。