通常ルールの利点は、使いやすいことです。数時間勉強すれば、ほとんどの通常ルールを理解できます。理解できても、実践する過程では、まだ多くのことに遭遇します。この記事では、正規表現の学習過程でよくある間違いをまとめました。
#正規表現
1.スペース
私たちは通常、コードを書くことがあります。 、スペースは通常、コードをより標準化するためのツールとして使用され、行頭の適切なインデントやタブと組み合わせることで、コードがより明確に見えます。ただし、正規表現では注意が必要です - スペース自体も照合対象の文字です。スペースを不適切に使用した場合:echo preg_match('/a{1, 3}/', "aaa") ? '匹配' : '不匹配'; // 不匹配たとえば、上記の正規表現は 1 ~ 3 つの a に照合することを目的としています。しかし実際には、次の 3 つの a とは一致しません。これは、{1, 3} の真ん中に余分なスペースがあり、メタキャラクタ「{}」の本来の意味が無効になり、通常の文字になるためです。代わりに ##"a {1, 3}" が照合されますが、これは明らかに私たちが望んでいることではありません。そのため、スペース文字自体が照合されない限り、スペースを使用しないでください。
echo preg_match('/a{1, 3}/', "a{1, 3}") ? '匹配' : '不匹配'; // 匹配# 例外パターン修飾子 理解するのが難しいため、使用はお勧めできません:
echo preg_match('/a{1,3}/', "aaa") ? '匹配' : '不匹配'; // 匹配
2. 大文字の使用
これは理解するのは簡単ですが、基本的にはうっかりミスです。結局のところ、検索ツールで文字を検索するとき、通常は大文字と小文字の両方が一致します。場合によっては、正規表現が大文字と小文字を自動的に一致させないことを忘れることがあります:
echo preg_match('/a a a/x', "aaa") ? '匹配' : '不匹配'; // 匹配このように一致する文字列の最初の文字が大文字になっている場合がありますが、当然一致しませんが、このとき大文字と小文字の両方を考慮する必要があります。しかし、特定の単語を一致させたい場合があります。この 4 文字が一致する限り、次のように書くのはさらに面倒です:
echo preg_match('/flag/', "Flag") ? '匹配' : '不匹配'; // 不匹配「fLaG」などという奇妙なものがあるとは想像しにくいですが、 「書き方ですが、このように書かないと全ての状況にマッチすることはできません。大文字と小文字を気にしない場合もありますが、マッチする文字列が非常に長い場合があります。恐れ入りますが、このように書くと疲れてしまいますが、幸いなことに「i」修飾子があります。シンボル:
echo preg_match('/[Ff][Ll][Aa][Gg]/', "Flag") ? '匹配' : '不匹配'; // 匹配修飾子「i」が設定されている場合、パターン内での大文字と小文字の一致は区別されません。
3. 貪欲モード
量子「 」と「*」はデフォルトで貪欲モードです。初心者はそれが引き起こす問題に遭遇しないかもしれません。何が理解できませんかこれは、kano の例です:
echo preg_match('/flag/i', "Flag") ? '匹配' : '不匹配'; // 匹配
正規表現の本来の目的は、文字列内のすべての Span タグを検索することです。それらを配列に入れましたが、結果は奇妙です。両方のスパンが一度に一致しました。実際、よく考えてみると、これは当然のことであり、文字列「aaabbb」は確かに で始まり で終わります。ですが、その中の .* が一致する内容が多すぎます。「aaabbb」はすべて一致します。これは、「 」と「*」の貪欲モードです。デフォルトでは、これらは可能な限り多くの文字に一致します。最後に「?」を追加すると、この貪欲モードがキャンセルされ、可能な限り少ないコンテンツのみに一致するようになります。
preg_match_all('/<span>.*<\/span>/', "<span>aaa</span><span>bbb</span>", $matches); var_dump($matches);
今回は希望どおりの結果が得られました。
通常の構文は非常に特殊なので、注意しないと簡単に問題が発生します。 推奨学習: 「正規表現の簡単な紹介以上が正規表現を学習する初心者にありがちな間違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。