帮助处理所需的正则表达式。我正在尝试使用正则表达式和preg_match_all
查找块<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 :(得分:5)
除非你需要枪口使用正则表达式来执行此操作,否则DOMDocument将更加准确。
<?php
$dom = new DOMDocument;
$dom->loadXML($data);
$character_nodes = $dom->getElementsByTagName('character');
// use $character_nodes...
?>
答案 1 :(得分:3)
如果使用preg
系列函数,则正则表达式应为:
/\<character>(.*?)\<\/character>/s
非贪婪的操作符?
将阻止您从第一个<character>
开始到最后一个</character>
结束一个匹配。/s
标志将允许你的点符合换行符。
答案 2 :(得分:2)
尝试
<character>(.*?)<\/character>
问号是一个不合格的限定符,这意味着它会尽可能地缩短字符串。还&lt;和&gt;不需要逃避。
答案 3 :(得分:0)
您可能需要使用“/ u”选项来正确处理UTF8文本。
http://php.net/manual/en/reference.pcre.pattern.modifiers.php