2016-07-31 2 views
-1

<HostProperties> 태그 내부의 모든 항목을 추출하려고합니다. 나는이 정규식을 파이썬에서 사용하고 잘 작동하지만 PHP에서이 정규식을 사용하면 <HostProperties> 태그 내의 다른 모든 태그를 무시하고 아래에 표시된 출력을 제공합니다.PHP 정규식에서 캡처 한 결과에 HTML 태그가 표시되지 않습니다.

내 입력된다 :

<HostProperties> 
<tag name="cpe-1">cpe:/a:microsoft:iis:8.5</tag> 
<tag name="HOST_END">Fri May 6 07:15:32 2016</tag> 
<tag name="LastUnauthenticatedResults">1462533332</tag> 
<tag name="Credentialed_Scan">false</tag> 
<tag name="policy-used">Advanced Scan</tag> 
<tag name="patch-summary-total-cves">16</tag> 
<tag name="cpe">cpe:/o:microsoft:windows</tag> 
<tag name="os">windows</tag> 
<tag name="cpe-0">cpe:/o:microsoft:windows_server_2012:r2::datacenter</tag> 
<tag name="system-type">general-purpose</tag> 
<tag name="operating-system">Microsoft Windows Server 2012 R2 Datacenter</tag> 
<tag name="mac-address">34:40:b5:a1:be:8a</tag> 
<tag name="traceroute-hop-0">172.23.144.5</tag> 
<tag name="host-ip">172.23.144.5</tag> 
<tag name="netbios-name">PKLHODC03</tag> 
<tag name="HOST_START">Fri May 6 07:05:56 2016</tag> 
</HostProperties> 

내 PHP 정규식 번호 :

preg_match_all("#(?<=(<HostProperties>))((?:.|\n)*?)(?=</HostProperties)#s", $reading, $host_properties); 


        echo "<pre>"; 

        var_dump($host_properties[2]); 

        echo "</pre>"; 

        echo "<br>"; 

내 출력된다 :

cpe:/a:microsoft:iis:8.5 
Fri May 6 07:15:32 2016 
1462533332 
false 
Advanced Scan 
16 
cpe:/o:microsoft:windows 
windows 
cpe:/o:microsoft:windows_server_2012:r2::datacenter 
general-purpose 
Microsoft Windows Server 2012 R2 Datacenter 
34:40:b5:a1:be:8a 
172.23.144.5 
172.23.144.5 
172.23.144.5 
172.23.144.5 
PKLHODC03 
Fri May 6 07:05:56 2016 

내 예상 출력된다 :

<tag name="cpe-1">cpe:/a:microsoft:iis:8.5</tag> 
<tag name="HOST_END">Fri May 6 07:15:32 2016</tag> 
<tag name="LastUnauthenticatedResults">1462533332</tag> 
<tag name="Credentialed_Scan">false</tag> 
<tag name="policy-used">Advanced Scan</tag> 
<tag name="patch-summary-total-cves">16</tag> 
<tag name="cpe">cpe:/o:microsoft:windows</tag> 
<tag name="os">windows</tag> 
<tag name="cpe-0">cpe:/o:microsoft:windows_server_2012:r2::datacenter</tag> 
<tag name="system-type">general-purpose</tag> 
<tag name="operating-system">Microsoft Windows Server 2012 R2 Datacenter</tag> 
<tag name="mac-address">34:40:b5:a1:be:8a</tag> 
<tag name="traceroute-hop-0">172.23.144.5</tag> 
<tag name="host-ip">172.23.144.5</tag> 
<tag name="netbios-name">PKLHODC03</tag> 
<tag name="HOST_START">Fri May 6 07:05:56 2016</tag> 

출력이 예상과 다른 이유는 무엇입니까?

+0

나는 당신이 그 출력에 대한 잘못된 것 같아요. 그러나''~ (? <= ). *? (? = sln

+2

웹 브라우저에서 출력을보고 있습니까? 이러한 태그는 HTML 인 것처럼 브라우저에 표시되는 대신 해석 될 수 있습니다. – Chris

+3

''# (. *?) #s "'와'print_r ($ matches [1])'을 사용하십시오. 둘러보기가 필요 없습니다. 그런 다음 DOM 사용을 고려하십시오. –

답변

0

<pre> 태그 does not prevent markup from being rendered :

참고 : 확실 동봉 된 코드는 마크 업으로 해석되지 않습니다 만들기 위해 '&lt;'로 모든 포함 된 '<'문자를 이스케이프해야합니다.

것은 당신이 htmlspecialchars() 기능은 유용 여기 증명할 수 PHP를 사용하고 있기 때문에 :

echo "<pre>"; 
echo htmlspecialchars($host_properties[2]); 
echo "</pre>"; 
관련 문제