2017-01-16 1 views
0

코드에서 HTML 태그를 가져오고 싶지만 시작 및 종료 HTML 태그 사이의 문자열 만 제공합니다.PHP에서 정규 표현식을 사용할 때 HTML 태그가 일치하지 않습니다.

<? 
$string = 'this is <em>first</em> test'; 

preg_match('/<.+?>/', $string, $matches); 

echo '<pre>'; 
    print_r($matches); 
echo '</pre>'; 
?> 

이 코드는 나에게 <em></em>를 제공해야하지만, 대신에 나는 단지 배열에서 사전에

감사합니다 :)

+4

가장 좋은 방법 :

다음은 실행 가능한 예이다. [PHP에서 HTML/XML을 어떻게 분석하고 처리합니까?] (http://stackoverflow.com/questions/3577641/how-do-you-parse-and-process-html-xml-in-php) –

+0

' .'는 개행 문자가 아니며,'+'는 이전 문자/그룹 중 하나 이상입니다.'? '는 다음 문자의 첫 번째 인스턴스에서 일치를 중지합니다. 예 : '.''를 그룹화했다면 첫 번째 캡처 그룹에서'em '을 얻었을 것입니다. 그룹 0은 모두 일치합니다. 파서와 함께 가라. – chris85

+0

@AlexK. 감사. – GhusiMushi

답변

0

다음과 같은 패턴을 검색 할 수 있습니다 를 얻을 :

<[^<>]+?>[^<>]*?<\/[^<>]+?> 

중첩되지 않은 HTML (예 : this is <em>first</em> test), 중첩되지 않았습니다. 당신은 분명히 HTML 구문 분석기를 찾아야하며 주석으로 이미 언급했듯이 혼자서는하지 말아야합니다. 그것은 정규식을 사용하지 않는 것입니다 할

var text = 'this is <em>first</em> test'; 
 
var match = text.match(/<[^<>]+?>[^<>]*?<\/[^<>]+?>/g); 
 
console.log(match);

관련 문제