2009-11-07 77 views
1

需要正則表達式的幫助。我正在嘗試使用正則表達式,並且preg_match_all找到塊<character>...</character>。這裏是我的數據看起來像:正則表達式尋找<character>標籤

<character> 
杜塞爾多夫 
杜塞爾多夫 
    <div class="hp">dùsàiěrduōfū<div class="hp">dkfjdkfj</div></div> 
    <div class="tr"><span class="green"><i>г.</i></span> Duesseldorf (<i>Deutschland</i>)</div> 
    <div class="tr"></div> 
</character> 

<character> 
    我, 是誰 
    <div class="hp">текст</div> 
    <div class="tr">some text in different languages</div> 
</character> 

我試圖\<character\>.*\<\/character>但遺憾的是它沒有工作。有什麼建議麼?

+0

你是什麼意思「沒有工作」?你沒有得到比賽或錯誤的比賽嗎? – 2009-11-07 23:43:31

+4

Regex是處理XML的不好選擇。使用XML解析器,您的任務變得非常簡單。 – bobince 2009-11-08 00:08:46

回答

3

如果使用preg家庭的功能,正則表達式應該是:

/\<character>(.*?)\<\/character>/s 

非貪婪的運營商?會阻止你只得到一個從第一<character>開始比賽,並結束在最後</character>/s標誌將允許您的點匹配換行符。

+0

'<'不需要轉義。 – 2009-11-08 11:11:22

2

嘗試

<character>(.*?)<\/character> 

問號是ungreedy預選賽,這意味着它會匹配字符串儘可能短。另外<和>不需要轉義。

+0

我只是想說一樣的,但我已經丟失了我很容易找到的示例源代碼。 ))) – 2009-11-07 23:46:18

5

除非你需要在槍點使用正則表達式來做到這一點,DOMDocument將會更加準確。

<?php 

$dom = new DOMDocument; 
$dom->loadXML($data); 

$character_nodes = $dom->getElementsByTagName('character'); 

// use $character_nodes... 
?> 
+0

甚至在槍口有沒有很好的理由使用正則表達式來解析XML,但它仍然可能的數據只是看起來像XML,但不是很有效的XML ... – Kris 2009-11-08 00:45:24

+1

@Kris,我認爲「沒有被槍殺」仍然是一個在槍口下做某事的好理由。 ;) – 2009-11-08 01:04:33

+0

+1給出正確的答案。也有用於HTML的DOM解析器。對於其他任務,RegEx是一個很好的工具。 – TrueWill 2009-11-08 02:51:16