通常ルールの利点は、使いやすいことです。数時間勉強すれば、ほとんどの通常ルールを理解できます。理解できても、実践する過程では、まだ多くのことに遭遇します。この記事では、正規表現の学習過程でよくある間違いをまとめました。
#正規表現
1.スペース
私たちは通常、コードを書くことがあります。 、スペースは通常、コードをより標準化するためのツールとして使用され、行頭の適切なインデントやタブと組み合わせることで、コードがより明確に見えます。ただし、正規表現では注意が必要です - スペース自体も照合対象の文字です。スペースを不適切に使用した場合:echo preg_match('/a{1, 3}/', "aaa") ? '匹配' : '不匹配'; // 不匹配
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") ? '匹配' : '不匹配'; // 匹配
echo preg_match('/flag/', "Flag") ? '匹配' : '不匹配'; // 不匹配
echo preg_match('/[Ff][Ll][Aa][Gg]/', "Flag") ? '匹配' : '不匹配'; // 匹配
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 サイトの他の関連記事を参照してください。