ホームページ >バックエンド開発 >PHPチュートリアル >phpの正規修飾子の使用例を詳しく解説

phpの正規修飾子の使用例を詳しく解説

高洛峰
高洛峰オリジナル
2017-01-09 10:23:371427ブラウズ

この記事の例では、PHP の通常の修飾子の使用法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

<?php
   //标记在整个模式之外;
   // 例://$mode="/\bis\b/U",其中U在外面;
  //修正符:i 不区分大小写的匹配;
     //如:"/abc/i"可以与abc或aBC或ABc等匹配;
  //修正符:m 将字符串视为多行,不管是那行都能匹配;
  //  例://模式为:$mode="/abc/m";
     //要匹配的字符串为:$str="bcefg5e\nabcdfe"
     //注意其中\n,换行了;abc换到了下一行;
     //$str和$mode仍可以匹配,修正符m使得多行也可匹配;
  //修正符:s 将字符串视为单行,换行符作为普通字符;
   // 例://模式为:$mode="/pr.y/";
      //要匹配字符串为:$str="pr\ny";
      //两者不可匹配; . 是除了换行以外的字符可匹配;
      //修改下模式为:$mode="/pr.y/s";
        //其中修正符s将\n视为普通字符,即不是换行;
      //最后两者可以匹配;
  //修正符:x 将模式中的空白忽略;
  //修正符:A 强制从目标字符串开头匹配;
   // 例://$mode="/abc/A";
      //可以与$str="abcsdfi"匹配,
      //不可以与$str2="sdsdabc"匹配;
      //因为$str2不是以abc开头;
  //修正符:D 如果使用$限制结尾字符,则不允许结尾有换行;
  //  例://模式为:$mode="/abc$/";
      //可以与最后有换行的$str="adshabc\n"匹配;
      //元子符$会忽略最后的换行\n;
      //如果模式为:$mode="/abc/D",
      //则不能与$str="adshabc\n"匹配,
      //修正符D限制其不可有换行;必需以abc结尾;
  //修正符:U 只匹配最近的一个字符串;不重复匹配;
  //  例:
  //   如模式为:
      $mode="/a.*c/";
      $str="abcabbbcabbbbbc" ;
      preg_match($mode,$str,$content);
      echo $content[0]; //输出:abcabbbcabbbbbc;
      //如果$mode="/a.*c/";变成$mode="/a.*c/U";
      // 则只匹配最近一个字符串,输出:abc;
//修正符:e 配合函数preg_replace()使用,
//      可以把匹配来的字符串当作正则表达式执行;
?>

修飾子:

POSIX 互換の正規表現には修飾子がありません。

正規表現で使用できる Perl 互換の修飾子 (修飾子のスペースと改行は無視され、他の文字はエラーの原因となります):

i (PCRE_CASELESS):
照合時に大文字と小文字を無視します。

m (PCRE_MULTILINE):
この修飾子が設定されている場合、行の先頭 (^) と行の末尾 ($) は文字列全体の先頭と末尾に一致するだけでなく、文字列の末尾とも一致します。改行文字 (n) とその前。

s (PCRE_DOTALL):
この修飾子が設定されている場合、パターン内のドット メタ文字 (.) は改行を含むすべての文字と一致します。この設定を行わないと、改行文字は含まれません。

x (PCRE_EXTENDED):
この修飾子が設定されている場合、パターン内の空白文字は、エスケープされた文字または文字クラス内の文字を除き、完全に無視されます。

e :
この修飾子が設定されている場合、preg_replace() は置換文字列内の後方参照の通常の置換を実行し、それを PHP コードとして評価し、その結果を使用して検索文字列を置換します。 preg_replace() のみがこの修飾子を使用し、他の PCRE 関数はそれを無視します。

A (PCRE_ANCHORED):
この修飾子が設定されている場合、パターンは強制的に「アンカー」されます。つまり、ターゲット文字列の先頭からのみマッチングが開始されるように強制されます。

D (PCRE_DOLLAR_ENDONLY):
この修飾子が設定されている場合、パターン内の行末 ($) はターゲット文字列の末尾にのみ一致します。このオプションを指定しないと、最後の文字が改行文字の場合も一致します。 m 修飾子が設定されている場合、このオプションは無視されます。

S:
パターンが複数回使用される場合、マッチングを高速化するために最初に分析する価値があります。 この修飾子が設定されている場合、追加の分析が実行されます。現在、パターンの分析は、単一の固定開始文字を持たない非アンカー パターンにのみ役立ちます。

U (PCRE_UNGREEDY):
「?」のデフォルトのマッチングを貪欲にします。

X (PCRE_EXTRA):
パターン内のバックスラッシュの後に特別な意味のない文字が続くとエラーが発生するため、この組み合わせは将来の拡張のために保存されます。デフォルトでは、バックスラッシュの後に特別な意味を持たない文字が続くと、その文字そのものとして扱われます。

u (PCRE_UTF8):
パターン文字列は UTF-8 として扱われます。

注:

パターン修飾子

i - 大文字と小文字の両方に一致します
M - 文字列を複数行として扱います
S - 文字列を 1 行として扱い、改行を通常の文字として扱います 「.」を作成します。任意の文字に一致します


PHP の通常の修飾子の詳細な使用例と関連記事については、PHP 中国語 Web サイトに注目してください。

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