用正则表达式分隔字符串

时间:2014-06-26 13:06:57

标签: php regex preg-match-all

当我尝试将此字符串分开时:

<b>Pristatymo laikas: </b>08-17h (visoje Lietuvoje)<br /><b>Dovanų kuponai:</b> <br />Panaudotas 200.00 Lt. dovanų kuponas, kurio kodas: xxxxx<br /><b>Mokėtina suma:</b> 12.00 Lt. <br />

使用reg ex模式:

<b>(.*)</b>

我得到了这场比赛:

<b>Pristatymo laikas: </b>08-17h (visoje Lietuvoje)<br /><b>Dovanų kuponai:</b> <br />Panaudotas 200.00 Lt. dovanų kuponas, kurio kodas: xxxxx<br /><b>Mokėtina suma:</b>

但是我将<b>标记中的所有单词分隔为:

<b>Pristatymo laikas: </b>
<b>Dovanų kuponai:</b>
<b>Mokėtina suma:</b>

如何写出正确的模式?

2 个答案:

答案 0 :(得分:3)

改为使用.*?

<b>(.*?)</b>

?量词(非贪婪)匹配尽可能少,因此在第一次遇到</b>

时停止

DEMO

答案 1 :(得分:1)

您必须关注.* ?进行non-greedy匹配。

<b>(.*?)</b>

虽然您可以使用简单的正则表达式执行此操作,但最好使用Parser。

$html = '<b>Pristatymo laikas: </b>08-17h (visoje Lietuvoje)<br />
<b>Dovanų kuponai:</b> <br />Panaudotas 200.00 Lt. dovanų kuponas, kurio kodas:
xxxxx<br /><b>Mokėtina suma:</b> 12.00 Lt. <br />';

$doc = new DOMDocument();
$doc->loadHTML($html); 

$xpath = new DOMXPath($doc);

foreach ($xpath->query('//b') as $tag) {
   echo $tag->ownerDocument->saveHTML($tag) . "\n";
}

<强>输出

<b>Pristatymo laikas: </b>
<b>Dovanų kuponai:</b>
<b>MokÄtina suma:</b>