2014-03-29 94 views
-2

所以我在網站上做了一些修改,一切正常。我從頁面返回的結果有一些類似的span標籤:PHP中的正則表達式匹配區域

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

實際上有可能會返回5個span標籤。從0-4。我希望能夠在開始和結束跨度標籤之間挖掘出狀態。我似乎無法在SO上找到適合我需要的東西。

+1

也許更好的使用XPath代替正則表達式 – donfuxx

+0

不,不與正則表達式去,用**的DOMDocument * * class,'foreach($ dom-> getElementsByTagName('span')as $ tag){ 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* > 

Perl的測試用例

$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 - 應該工作。我改變了分隔符,並在Perl中添加了一個測試用例(沒有php),和PCRE一樣。 – sln

+0

經過一番調整,我得到了它的工作,但你把我放在正確的道路上! :) 謝謝 – MrTechie