首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用preg-match将html标签替换为其他标签?

如何使用preg-match将html标签替换为其他标签?
EN

Stack Overflow用户
提问于 2012-11-19 17:12:57
回答 2查看 164关注 0票数 2

我有一个如下所示的字符串。

代码语言:javascript
复制
<label>value1<label>:value<br>
<label>value2<label>:value<br>
<label>value3<label>:value<br>

我需要将其安排如下

代码语言:javascript
复制
 <li><label>value1<label><span>value</span><li>

我已经试了2天了,但是没有luck.Any帮助?

EN

回答 2

Stack Overflow用户

发布于 2012-11-19 17:27:32

这确实不是您应该使用regex来做的事情。您也许能够拼凑出一个有效的解决方案,但前提是它对正在解析的内容做了很多假设,但是如果内容偏离预期的程度很大,那么它总是脆弱的,很容易崩溃。

更好的选择是使用PHP的DOM family类。我不能自由地为您编写代码(这也不是为您编写代码的目的),但我可以给您一个关于您需要遵循的步骤的指针。

  1. 定位标签后面和BR之前的文本节点(XPath在这里可能很有用)
  2. 将文本节点放入范围中。
  3. 将跨度插入到DOM中的label
  4. Remove BR之后。
  5. wrap label

span in label

票数 0
EN

Stack Overflow用户

发布于 2013-02-15 16:19:34

如果出于正则表达式的原因,您应该使用它,则如下所示:

代码语言:javascript
复制
$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>
*/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13450632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档