2014-03-29 2 views
-2

사이트에서 약간의 근근이 살아가고 있고 모든 것이 잘 작동합니다. 페이지에서 얻은 결과에는 다음과 같은 일부 span 태그가 있습니다.PHP의 정규식 일치 영역

<span id="content_drptrResults_lblStatus_0">Assigned</span> 

실제로 가능한 5 개의 span 태그가 있습니다. 0-4에서. 나는 오프닝 (opening)과 닫는 스팬 (closing span) 태그 사이에서 상태를 파고들 수있게하고 싶다. 나는 내가 필요한 것에 효과가있는 것을 찾을 수 없다.

+1

어쩌면 더 나은 사용, 정규식하지 않는 대신 정규식 – donfuxx

+0

아니의 XPath를 사용하십시오 ** DOMDocument를 * * 클래스,'$ 태그로 foreach ($ dom-> getElementsByTagName ('span')) { echo $ tag-> nodeValue; }' –

+0

그래서 preg_match_all을 사용하면 어떨까요? – MrTechie

답변

1

정규식을 사용하지 마십시오. 그러나 당신이해야한다면, 이것은 완벽하지 않습니다.
중첩이 발생하면 특히 나쁩니다.

# '/<span(?=\s)[^>]*id\s*=\s*"[^"]*Status_([0-4])[^"]*"[^>]*>([^<>]*)<\/span\s*>/' 


<span 
(?= \s) 
[^>]* 
id \s* = \s* 
" [^"]* 
Status_ 
([0-4])  # (1) 
[^"]* 
" 
[^>]* 
> 
([^<>]*)  # (2) 
</span \s* > 

펄 테스트 케이스

$str = '<span id="content_drptrResults_lblStatus_0">Assigned</span>'; 

if ($str =~ /<span(?=\s)[^>]*id\s*=\s*"[^"]*Status_([0-4])[^"]*"[^>]*>([^<>]*)<\/span\s*>/) 
{ 
    print "Matched '$1' = '$2'\n"; 
} 

출력 >>

Matched '0' = 'Assigned' 
+0

grrr -이 기능을 사용할 수 없습니다. – MrTechie

+0

@MrTechie - 작동해야합니다. 구분 기호를 변경하고 PCRE와 마찬가지로 Perl에서 테스트 케이스를 추가했습니다 (PHP가 없음). – sln

+0

조금 조정 한 후에 작동 시키지만 올바른 경로에 나를 올려 놓으십시오! :) 감사 – MrTechie