1

不幸的是,我真的无法理解正则表达式,所以我最后的手段是向你们这些优秀的人寻求帮助。

我有这个现有的代码:

<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>

谁能帮助我使用适当的正则表达式来实现这一目标?

4

2 回答 2

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;
}
于 2012-11-13T14:10:04.260 回答
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 字符串中的任何文本的输出。

对不起,如果这也没有帮助。

于 2012-11-13T13:32:36.297 回答