2017-12-27 24 views
1

쿼리 문자열을 구문 분석하려고하는데 내가 알아 내지 못하는 문제가 발생했습니다.php preg_match_all에서보다 작음 (<) 연산자로 문제가 발생했습니다.

< 또는>을 포함 할 수있는 문자열과 일치 시키려고 시도했지만 문자열에 <이 포함 된 경우에만 이상한 결과가 표시됩니다.

예 : 예상대로

<?php 
$gt = 'wt>f'; 
preg_match_all("/([A-Za-z<>]+)/", $gt, $gtmatches); 
?> 

<pre><?php print_r($gtmatches); ?></pre> 

결과 :

코드 :

Array 
(
    [0] => Array 
     (
      [0] => wt>f 
     ) 

    [1] => Array 
     (
      [0] => wt>f 
     ) 
) 

그러나 단순히 <으로> 것을 교체, 정말 이상한 출력을 제공

<?php 
$lt = 'wt<f'; 
preg_match_all("/([A-Za-z<>]+)/", $lt, $ltmatches); 
?> 

<pre><?php print_r($ltmatches); ?></pre> 

출력이 :

Array 
(
    [0] => Array 
     (
      [0] => wt Array 
     (
      [0] => wt 

내가 PHP 5.6.24에서이를 테스트 한/10 IIS, 로컬 PHP 5.6.32에/아파치 2.4.29.

해결 덕분에 iainn 할 (빌어 먹을 너희들이 빨리!)

내 브라우저 소스를 찾고, 태그의 시작으로 <을 해석하고, 모든 것이 괜찮습니다.

+1

그것은 나를 위해 일하고있다 : - https://eval.in/926067 및 https://eval.in/926069 –

답변

0

당신은 브라우저에서 print_r 출력을 볼려고, 그리고 HTML 태그로 <을 해석하는 것 , 두 줄 후에 =>의 끝까지. 렌더링 된 결과물이 아닌 페이지 소스를 보면 예상 한 결과를 볼 수 있습니다.

주석에서 언급했듯이 정규식 자체가 올바르게 작동합니다.

+1

아하하라. 물론 그렇게 간단했다. 나는 너무 오래 코딩 해 왔다고 생각한다 .- 감사합니다! –

0

< 및>는 특수 문자입니다. 그들 각각의 앞에 백 슬래시를 배치하거나, ​​전달의 전에 문자열에이 기능을 사용 - http://php.net/manual/en/function.preg-quote.php

preg_match_all("/([A-Za-z\<\>]+)/", $gt, $gtmatches); 
+0

브라우저가 HTML 태그로 해석하려고했으나 preg_quote에 대해 감사한다. , 그게 편리 할거야! –