PHP正規(guī)表現(xiàn)のパターン修飾子
メタキャラクターとアトムによる正規(guī)表現(xiàn)表現(xiàn)の入門が完了しました。まだ対処する必要がある特殊な狀況がいくつかあります。
abc が 2 行目の先頭にある場合に一致させるにはどうすればよいですか?
正規(guī)表現(xiàn)ですべてを一致させることにあまり欲張らないようにしたいのですが、一部にしか一致しない場合はどうすればよいですか?
現(xiàn)時點では、通常の機能を強化するために次のパターンマッチングを使用する必要があります。
一般的に使用されるパターン マッチング文字は次のとおりです:
パターン マッチング文字 | 関數(shù) |
---|---|
i | パターン內(nèi)の文字は大文字と小文字の両方に一致します |
m | 。文字列view 複數(shù)行の場合は、 |
x | ターゲットからのみ強制的に改行を含む単一行として文字列を扱います。 string パターン內(nèi)のドルのメタ文字は、ターゲット文字列の先頭のみに一致します。 |
U | は、ターゲット文字列の末尾のみに一致します。 パターン マッチング文字の使用方法は次のとおりです: /正規(guī)表現(xiàn)の意味/パターン マッチング文字 パターン マッチング文字はこの文の最後に配置されます。例: /w+/s 形式については明確です 次に重要なことは、パターン マッチング記號の使用についての理解と記憶を強化することです。コードを使用して、パターン マッチを追加する場合と追加しない場合の違いを理解します。 i 大文字と小文字は區(qū)別されません <?php //在后面加上了一個i $pattern = '/ABC/i'; $string = '8988abc12313'; $string1 = '11111ABC2222'; if(preg_match($pattern, $string, $matches)){ echo '匹配到了,結(jié)果為:'; var_dump($matches); }else{ echo '沒有匹配到'; } ?> 結(jié)論として、$string と $string1 は両方とも正常に一致します。したがって、最後に i を追加すると、コンテンツが一致する場合は無視できます。 mは複數(shù)行として扱われます 正規(guī)表現(xiàn)によるマッチングの場合、通常、マッチング対象の文字列は1行として扱われます。 「行頭」メタキャラクタ (^) は文字列の先頭にのみ一致し、「行末」メタキャラクタ ($) は文字列の末尾にのみ一致します。 この修飾子が設(shè)定されている場合、「行の開始」と「行の終了」は文字列全體の先頭と末尾に一致するだけでなく、それぞれ文字列內(nèi)の改行文字の前後にも一致します。 注: 一致する文字列に「n」文字がない場合、またはパターンに ^ または $ がない場合、この修飾子を設(shè)定しても効果はありません。 実験とコードを通じてこの機能を検証してみましょう: 最初の一致では、一致が失敗したことがわかります: <?php $pattern = '/^a\d+/'; $string = "我的未來在自己手中我需要不斷的努力 a9是一個不錯的字符表示 怎么辦呢,其實需要不斷奮進"; if (preg_match($pattern, $string, $matches)) { echo '匹配到了,結(jié)果為:'; var_dump($matches); } else { echo '沒有匹配到'; } ?> 2 番目の一致では、m を追加します。 Try: <?php $pattern = '/^a\d+/m'; $string = "我的未來在自己手中我需要不斷的努力 a9是一個不錯的字符表示 怎么辦呢,其實需要不斷奮進"; if (preg_match($pattern, $string, $matches)) { echo '匹配到了,結(jié)果為:'; var_dump($matches); } else { echo '沒有匹配到'; } ?> 結(jié)果: そうそう!試合は成功した。 /^ad+/ 一致するコンテンツは a9 であり、これは行の先頭にある必要があります。 2 行目も正常に一致します。 は 1 つの行として認識されます この修飾子が設(shè)定されている場合、パターン內(nèi)のドット メタ文字 (.) は、改行を含むすべての文字と一致します。 1回目は、パターンマッチング文字sを追加せずに: <?php $pattern = '/新的未來.+\d+/'; $string = '新的未來 987654321'; if (preg_match($pattern, $string, $matches)) { echo '匹配到了,結(jié)果為:'; var_dump($matches); } else { echo '沒有匹配到'; } ?> 2回目は、正規(guī)表現(xiàn)の後にパターンマッチング文字sを追加: <?php $pattern = '/新的未來.+\d+/s'; $string = "新的未來 987654321"; if (preg_match($pattern, $string, $matches)) { echo '匹配到了,結(jié)果為:'; var_dump($matches); } else { echo '沒有匹配到'; } ?> 結(jié)果は以下のようになり、マッチングは成功しました。 結(jié)論: 1. 新しい future では、future の後に改行があるため 2. そして、(ドット) は空白文字以外のすべての文字と一致します。そのため、1回目は失敗でした 3. 2回目は、sパターンマッチャーを追加しました。 . (ドット) を追加すると、すべての文字と一致するためです。 x 空白文字を無視する 1. この修飾子が設(shè)定されている場合、エスケープされた文字または文字クラス內(nèi)の空白文字を除き、パターン內(nèi)の空白文字は完全に無視されます。 2. エスケープされていない文字クラス外の # 文字と次の改行文字の間の文字も無視されます。 まずは空白行の無視などの機能を試してみましょう: <?php $pattern = '/a b c /x'; $string = '學(xué)英語要從abc開始'; if (preg_match($pattern, $string, $matches)) { echo '匹配到了,結(jié)果為:'; var_dump($matches); } else { echo '沒有匹配到'; } ?> これも正常に一致します。 $pattern にはスペースがあり、各 abc の後にはスペースがあります。 $string にはスペースは含まれません。 2番目の文は文字通り理解するのがさらに困難です、 <?php //重點觀察這一行 $pattern = '/a b c #我來寫一個注釋 /x'; $string = '學(xué)英語要從abc開始'; if (preg_match($pattern, $string, $matches)) { echo '匹配到了,結(jié)果為:'; var_dump($matches); } else { echo '沒有匹配到'; } ?> 結(jié)果も成功した試合です! x の 2 番目の特徴は無視されることであることがわかりました。# 文字と次の改行文字の間の文字も無視されます。 e 一致する項目を見つけて置換します
mixed preg_replace (mixed $registry match,mixed $replacement,mixed $search string)
正式な説明の前に、これまでの知識を確認してみましょう。一致する各原子の周りに括弧を付けました: <?php //加上了括號 $pattern = '/(\d+)([a-z]+)(\d+)/'; $string = '987abc321'; if (preg_match($pattern, $string, $match)) { echo '匹配到了,結(jié)果為:'; var_dump($match); } else { echo '沒有匹配到'; } ?> 結(jié)果を見てみましょう: これは以前に行ったことです。かっこについて話す場合: 一致したコンテンツの外側(cè)にかっこがあります。括弧內(nèi)の內(nèi)容も配列の要素に配置されます。寫真に示すように: 987、abc、321。 次に正規(guī)表現(xiàn)の e パターンを見てみましょう: <?php $string = "{April 15, 2003}"; //'w'匹配字母,數(shù)字和下劃線,'d'匹配0-99數(shù)字,'+'元字符規(guī)定其前導(dǎo)字符必須在目標對象中連續(xù)出現(xiàn)一次或多次 $pattern = "/{(\w+) (\d+), (\d+)}/i"; $replacement = "$2"; //字符串被替換為與第 n 個被捕獲的括號內(nèi)的子模式所匹配的文本 echo preg_replace($pattern, $replacement, $string); ?> 実行結(jié)果を見てみましょう: 結(jié)論: 上の例の $2 は正規(guī)表現(xiàn)の最初の (d+) を指します。表現(xiàn) )。また15を取り出す感じです 交換するときは$2と書きます。一致した項目を取り出して、再度一致結(jié)果を置き換えるのに使用されます。 U 貪欲モード制御 正規(guī)表現(xiàn)はデフォルトで貪欲、つまり可能な限り一致します。 正規(guī)表現(xiàn)がどれほど貪欲であるかを見てみましょう: <?php $pattern = '/<div>.*<\/div>/'; $string = "<div>你好</div><div>我是</div>"; if (preg_match($pattern, $string, $match)) { echo '匹配到了,結(jié)果為:'; var_dump($match); } else { echo '沒有匹配到'; } ?> 結(jié)果を見て、次の結(jié)論を得ましょう。 「 Hello」から「I am 」まで直接一致します。最大一致が行われました。 同じコード部分に大文字の U を追加して、その効果を見てみましょう: <?php $pattern = '/<div>.*<\/div>/U'; $string = "<div>你好</div><div>我是</div>"; if (preg_match($pattern, $string, $match)) { echo '匹配到了,結(jié)果為:'; var_dump($match); } else { echo '沒有匹配到'; } ?> 一致するものだけが得られることがわかりました: <div>你好</div> このようにして、正規(guī)表現(xiàn)の貪欲な機能がキャンセルされます。最も近い一致を見つけさせれば問題ありません。 A はターゲット文字列の先頭から一致します このパターンは、メタキャラクターの ^ (サーカムフレックス) 効果に似ています。 <?php $pattern = '/this/A'; $string = 'hello this is a '; //$string1 = 'this is a '; if (preg_match($pattern, $string, $match)) { echo '匹配到了,結(jié)果為:'; var_dump($match); } else { echo '沒有匹配到'; } ?> 結(jié)論: 1. A モード修飾子を追加したときに $string が照合できない場合は、追加せずに照合できます 2. A モード修飾子を追加したときに $string1 が照合できる場合、先頭から照合を開始します D 終了 $ 文字の後にはキャリッジ リターンは許可されません この修飾子が設(shè)定されている場合、パターン內(nèi)のドル メタ文字はターゲット文字列の末尾にのみ一致します。このオプションを使用しないと、ドル記號が改行文字の場合、最後の文字の前でも一致します。 <?php $pattern = '/\w+this$/'; $pattern1 = '/\w+this$/D'; $string = "hellothis "; if (preg_match($pattern1, $string, $match)) { echo '匹配到了,結(jié)果為:'; var_dump($match); }else { echo '沒有匹配到'; } ?> 結(jié)論: 1. たとえば、パターンが $string に一致する場合、$string の文字列 this の後にキャリッジ リターンがあります。 D マッチング文字 2 を追加しなくても、正常にマッチングすることもできます。たとえば、パターンが $string と一致する場合、D が追加されます。 $string の文字列 this の後にスペースがあるため、一致は失敗します。 ||
<?php
$pattern = '/this/A';
$string = 'hello this is a ';
//$string1 = 'this is a ';
if (preg_match($pattern, $string, $match)) {
echo '匹配到了,結(jié)果為:';
var_dump($match);
} else {
echo '沒有匹配到';
}
?>
現(xiàn)時點ではコースウェアはダウンロードできません?,F(xiàn)在スタッフが整理中です。今後もこのコースにもっと注目してください?
このコースを視聴した生徒はこちらも學(xué)んでいます
|