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

私は2つのことを提案することができます(私はあなたの問題を明確に理解できませんでしたが)

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

これにより、文字列からすべてのhtmlタグが削除されます。それがあなたにとって役立つかどうかはわかりません。

もう1つの推奨事項は、strip_tags関数を使用することです。の2番目のパラメータstrip_tagsはオプションです。2番目のパラメーターを使用して、保持するタグを定義できます。

$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 に答える