今回は、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 输出为著者別の最新記事
2018-06-11 11:57:34 2018-06-15 15:55:18 2018-06-15 15:49:00 2018-06-15 15:46:15 2018-06-15 15:42:38 2018-06-15 15:40:34 2018-06-15 15:39:32 2018-06-15 15:37:14 2018-06-15 15:34:21 2018-06-15 15:22:51最新の問題URL パラメータから取得した PHP 配列が期待どおりに動作しない カテゴリ ID を含む URL パラメータがあり、それを次のような配列として扱いたいと考えています: http://example.com?cat[]=3,9,13 PHP では、...から 2024-04-06 22:09:02011428戻り値の変数の形式は何ですか? 私はphpの初心者です。コードを見つけました: if($x<time()){return[false,'error'];} ロジックや変数は重要ではありませんが、[false...から 2024-04-06 21:55:2001778ループするために MySQL の結果を ID ごとにグループ化する mysqlにフライトデータを含むテーブルがあります。 codeigniter3Journey_idair_idFlightDurationout_or_inflightdurati...から 2024-04-06 17:27:5601406