PHP preg_replace在现有字符串中插入字符串

时间:2012-11-13 13:16:31

标签: php regex preg-replace

不幸的是,我真的无法理解正则表达式,所以我最后的办法就是向你们寻求帮助。

我有这个现有代码:

<li id="id-21" class="listClass" data-author="newbie">
    <div class="someDiv">
        <span class="spanClass">Some content</span>
    </div>

    <div class="controls faint">
        <a href="link2">Link 2</a>
        <a href="link3">Link 3</a>
    </div>
</li>

由于种种原因,我必须使用preg_replace注入一段额外的代码:

<a href="link1">Link 1</a>

我认为你可以猜到应该去哪里,但为了清楚起见,我希望结果字符串看起来像:

<li id="id-21" class="listClass" data-author="newbie">
    <div class="someDiv">
        <span class="spanClass">Some content</span>
    </div>

    <div class="controls faint">
        <a href="link1">Link 1</a>
        <a href="link2">Link 2</a>
        <a href="link3">Link 3</a>
    </div>
</li>

任何人都可以帮助我使用适当的正则表达式来实现这一目标吗?

2 个答案:

答案 0 :(得分:1)

试试这个

$html = '<li id="id-21" class="listClass" data-author="newbie">
    <div class="someDiv">
        <span class="spanClass">Some content</span>
    </div>

    <div class="controls faint">
        <a href="link2">Link 2</a> 
        <a href="link3">Link 3</a>
    </div>
</li>';


$eleName = 'a';
$eleAttr = 'href';
$eleAttrValue = 'link2';
$addBefore = '<a href="link1">Link 1</a>';

$result = regexAddBefore($html, $eleName, $eleAttr, $eleAttrValue, $addBefore);

var_dump($result);

function regexAddBefore($subject, $eleName, $eleAttr, $eleAttrValue, $addBefore){
    $regex = "/(<\s*".$eleName."[^>]*".$eleAttr."\s*=\s*(\"|\')?\s*".$eleAttrValue."\s*(\"|\')?[^>]*>)/s";
    $replace = $addBefore."\r\n$1";

    $subject = preg_replace($regex, $replace, $subject);

    return $subject;
}

答案 1 :(得分:0)

我可以提出两件事(虽然我无法清楚地理解你的问题)

$newStr = preg_replace ('/<[^>]*>/', ' ', $htmlText); 

这将删除字符串中的所有html标记。我不知道它对你有用。

另一个建议是使用strip_tags功能。 strip_tags的第二个参数是可选的。您可以借助第二个参数定义要保留的标记。

$str = '<li id="id-21" class="listClass" data-author="newbie">
        <div class="someDiv">
            <span class="spanClass">Some content</span>
        </div>

        <div class="controls faint">
            <a href="link2">Link 2</a>
            <a href="link3">Link 3</a>
        </div>
        </li>';

echo strip_tags ($str,'<a>');

这将为您提供输出,只显示链接和html字符串中的任何文本。

很抱歉,如果这也没有帮助。