이번에는 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 输出为