2

我有一个如下的字符串。

<label>value1<label>:value<br>
<label>value2<label>:value<br>
<label>value3<label>:value<br>

我需要安排如下

 <li><label>value1<label><span>value</span><li>

我已经尝试了过去 2 天,但没有运气。有帮助吗?

4

2 回答 2

0

这真的不是你应该用正则表达式做的事情。您可能可以将一个可行的解决方案混在一起,前提是它对其正在解析的内容做出很多假设,但如果该内容与预期有任何显着程度的偏差,它总是很脆弱并且容易崩溃。

更好的选择是使用 PHP 的DOM 系列类。我真的不能自由地为您编写代码(无论如何,这不是 SO 的用途),但我可以为您提供有关您需要遵循的步骤的指示。

  1. 定位标签之后和 BR 之前的文本节点(XPath 在这里可能很有用)
  2. 将文本节点放入跨度。
  3. 在标签之后将 span 插入 DOM
  4. 删除 BR。
  5. 将标签和跨度包装在一个里
于 2012-11-19T09:27:32.463 回答
0

如果,为了正则表达式,你应该使用它,然后如下:

$string = <<<TOK
<label>value1<label>:value<br>
<label>value2<label>:value<br>
<label>value3<label>:value<br>
TOK;
preg_match_all('/<label>(.*?)<label>\:(.*?)<br>/s', $string, $matches);
print_r($matches);
/*
Array
(
    [0] => Array
        (
            [0] => value1:value
            [1] => value2:value
            [2] => value3:value
        )
    [1] => Array
        (
            [0] => value1
            [1] => value2
            [2] => value3
        )

    [2] => Array
        (
            [0] => value
            [1] => value
            [2] => value
        )
)
*/
$content = "";
foreach($matches as $key => $match)
{
    $content.= "<li><label>{$matches[1][$key]}<label><span>{$matches[2][$key]}</span><li>\n";
}
echo($content);
/*
Output:
    <li><label>value1<label><span>value</span><li>
    <li><label>value2<label><span>value</span><li>
    <li><label>value3<label><span>value</span><li>
*/
于 2013-02-15T08:19:33.670 回答