1

私は正規表現を書くのが苦手なので、助けを求めています。

次の文字列があります。

<li class="current-menu-item"><a title="Site Name" href="http://www.example.com/">Home</a></li>

ハイパーリンクを H1 に置き換えたい。

タイトル、ハイパーリンク、アンカーテキストの変更を念頭に置いて、正規表現を使用してこれを行う簡単な方法はありますか?

4

2 に答える 2

1
preg_replace('/<a[^>]*>(\w+)<\/a>/', '<h1>$1</h1>', $subject);

']'は、'>'を除くすべての文字に一致します。'*'は、その前にある0個以上の文字に一致することを意味し、その後に'>'が続き、()内のすべてをキャプチャします。 、'\ w'は任意の単語文字に一致し、+はその前の文字の少なくとも1つの出現に一致し、その後''が表示されます(前方のスラッシュはエスケープする必要があります)。

$ subjectは、HTMLドキュメント全体または文字列のみである可能性があります。

于 2012-10-27T16:06:51.790 に答える
1

入力が自明ではない場合、これに正規表現を使用することはお勧めしません。複数行の html タグ、整形式でない入力、埋め込みタグは、ソリューションに簡単にモンキー レンチを投げ込む可能性があります。代わりに DOM クラスを使用してみてください。

$in = '<li class="current-menu-item"><a title="Site Name" href="http://www.example.com/">Home</a></li>';
$dom = new DOMDocument;
$dom->loadHTML($in);

// you can use any method to select the nodes in interest, if you need more power use xpath.
foreach ($dom->getElementsByTagName('a') as $a) {
    $replacement = $dom->createElement('h1');
    // poor man's innerHTML
    foreach ($a->childNodes as $cn) {
        $replacement->appendChild($cn);
    }   
    $a->parentNode->replaceChild($replacement, $a);
}

print $dom->saveHTML();
于 2012-10-27T16:18:47.173 に答える