다음 코드 :
<?php
$text = <<<EOT
blah blah <0>
<RequestDetails><1><2><3>test</RequestDetails>
<RequestDetails><4><5><6>blah
more blah blah
</RequestDetails>
blah blah <7>
EOT;
print $text;
preg_match_all('/<RequestDetails>(.*?)<\/RequestDetails>/s', $text, $matches);
print_r($matches);
?>
이 출력을 생성합니다 :
blah blah <0>
<RequestDetails><1><2><3>test</RequestDetails>
<RequestDetails><4><5><6>blah
more blah blah
</RequestDetails>
blah blah <7>
Array
(
[0] => Array
(
[0] => <RequestDetails><1><2><3>test</RequestDetails>
[1] => <RequestDetails><4><5><6>blah
more blah blah
</RequestDetails>
)
[1] => Array
(
[0] => <1><2><3>test
[1] => <4><5><6>blah
more blah blah
)
)
내가 대신 /g
플래그의 preg_match_all
를 사용했습니다를, 또한 당신이 원하는 것을 정말 (.*?)
꺼려 일치를 사용 여러 경기를 얻으십시오.
차이점을 확인하려면 다음 텍스트에 두 개의 A.*?Z
일치 항목이 있지만 하나만 A.*Z
입니다.
---A--Z---A--Z----
^^^^^^^^^^^
A.*Z
즉, 정규식을 사용하여 XML을 구문 분석하는 것은 좋지 않습니다. 적절한 XML 구문 분석기를 사용하십시오. 그것은 당신의 삶을 훨씬 쉽게 만들어 줄 것입니다.
동의하지만 HTTP 응답에 필요한 XML보다 많은 데이터가 포함된다는 점이 문제입니다. XML을 응답에서 빼낸 다음 SimpleXML에 문자열을로드해야합니다. – spdaly
@ spdaly okay. XML이 명확하게 정의되어 있다면, 정규식이 여기로 갈 수있는 방법 일 수 있습니다. –