ホームページ >ウェブフロントエンド >jsチュートリアル >PHP での正規表現の使用効率化 貪欲、非貪欲、バックトラッキングの詳細な説明 (コード付き)
今回は、PHP で通常の貪欲、非貪欲、およびバックトラッキングを使用する効率について詳しく説明します (コード付き) 注意点とは何か、そして以下は実際の戦闘です ケースを見てみましょう。 。
まず、正規表現における貪欲性について学びましょう。また、非貪欲性とは何でしょうか?あるいは、何が優先量指定子と一致し、何が優先量指定子を無視するのでしょうか?
わかりました、概念が何なのかわからないので、例を挙げてみましょう。
ある学生は、コンテンツをフィルタリングしたいと考え、通常のルールと手順をこのように書きました。
$str = preg_replace('%<script>.+?</script>%i','',$str);//非贪婪
何も問題がないように見えますが、実際はそうではありません。
$str = '<script<script>alert(document.cookie)</script>>alert(document.cookie)</script>';
の場合、上記のプログラム処理後の結果は
$str = '<script<script>alert(document.cookie)</script>>alert(document.cookie)</script>'; $str = preg_replace('%<script>.+?</script>%i','',$str);//非贪婪 print_r($str); //$str 输出为 <script>alert(document.cookie)</script>
ですが、それでも期待する効果を達成できません。上記は貪欲ではなく、怠惰と呼ばれるものもあります。貪欲でない記号は、+?、*?、?? などの、数量 メタキャラクター の後に ? が続きます (さらに特別なものについては、今後のブログで書きます)。 ?を書かない場合は貪欲を意味します。例えば
$str = '<script<script>alert(document.cookie)</script>>alert(document.cookie)</script>'; $str = preg_replace('%<script>.+</script>%i','',$str);//非贪婪 print_r($str); //$str 输出为