>  기사  >  백엔드 개발  >  PHP 정규식 효율성 탐욕, 비탐욕 및 역추적 분석(권장)

PHP 정규식 효율성 탐욕, 비탐욕 및 역추적 분석(권장)

高洛峰
高洛峰원래의
2017-01-09 10:16:421843검색

우선 정규식 중 욕심이 많은 것과 그렇지 않은 것이 무엇인지 알아볼까요? 아니면 일치 우선순위 수량자는 무엇이고 우선순위 수량자를 무시하는 것은 무엇입니까?

그렇습니다. 개념이 무엇인지 모르겠습니다. 예를 들어 보겠습니다.

한 학생이 그 사이의 내용을 필터링하고 싶어 정규 규칙과 절차를 이렇게 썼습니다.

$str = preg_replace(&#39;%<script>.+?</script>%i&#39;,&#39;&#39;,$str);//非贪婪

이상이 없는 것처럼 보이지만 사실은 그렇지 않습니다.

$str = &#39;<script<script>alert(document.cookie)</script>>alert(document.cookie)</script>&#39;;

이면 위의 과정을 거친 후 결과는

$str = &#39;<script<script>alert(document.cookie)</script>>alert(document.cookie)</script>&#39;;
$str = preg_replace(&#39;%<script>.+?</script>%i&#39;,&#39;&#39;,$str);//非贪婪
print_r($str);
//$str 输出为 <script>alert(document.cookie)</script>

아직 원하는 효과를 얻지 못하고 있습니다. 위의 것은 탐욕이 아니며, 어떤 것은 게으름이라고도 합니다. non-greedy의 표시는 +?, *?, ?? 등과 같은 정량적 메타 문자 뒤에 ?를 추가하는 것입니다(더 특별합니다. 이에 대해서는 향후 블로그에서 작성하겠습니다). 즉, ?를 쓰지 않으면 욕심이 없다는 뜻이다. 예를 들어

$str = &#39;<script<script>alert(document.cookie)</script>>alert(document.cookie)</script>&#39;;
$str = preg_replace('%<script>.+</script>%i','',$str);//非贪婪
print_r($str);
//$str 输出为