2012-11-23 93 views
0

可能重複:
regex help with getting tag content in PHP使用正則表達式在PHP中獲取html標記中的字符串的子字符串?

首先,請有關與正則表達式解析HTML無可奉告。我知道這是不可能的,但它應該在這種情況下完成工作。

我試着獲取<country lan="x">...</country>標記的內容。沒有像<country />這樣的特殊情況,由於包含許多特殊字符(MediaWiki文本)的標籤內容,PHP DOM解析器失敗。

所以我有這樣

<country lan="en"> 


    dsadasd 


    {|,'''""" }}|]][][]//\\\\\2r2erfaf<>><<<#<div> --..,;;"!"§$%&/()=?`´´``***+~~~'' 

    0131ß 

    ÄÜÖ#ax 
    </country> 

我此刻的解決方案的一些文字是$pattern = <country lan=\"en\">(.|\t|\r|\n|\s)*<\/country>這似乎符合使用

preg_match_all($pattern, $content, $matches); 
print_r($matches); 

但打印結果只是一個空數組。我如何只提取<country lan="x">...</country>標籤之間的字符串?

+0

如果我這樣做是正確的OP不能使用DOM解析器,因爲HTML是無效的。 –

+1

如果這對於一個正則表達式來說太複雜了,爲什麼只是不查找第一個字符串,然後查找第二個字符串並在兩個位置之間獲取子字符串?特別是開始和結束是固定的字符串。只是說DOM不適合你,也很清楚正則表達式對你來說太複雜了。所以只需要做標準的字符串操作。 – hakre

+0

我認爲DOM Parser並沒有這樣做,因爲在標籤之間混合了wiki標記和html的內容 - 所以它似乎是無效的。 「標準字符串操作」比使用正則表達式要困難得多,因爲每個站點可以有多個' ...'標籤。 – dnl

回答

1

使用這一個

preg_match_all('/<country.*?>(.*?)<\/country>/s', $contents,$hits); 
print_r($hits); 
+0

謝謝!編輯後,它工作正常。我怎樣才能同時獲得'lan =「x」'參數? – dnl

+0

你想獲得標籤的類名嗎? –

相關問題