私は正規表現を書くのが苦手なので、助けを求めています。
次の文字列があります。
<li class="current-menu-item"><a title="Site Name" href="http://www.example.com/">Home</a></li>
ハイパーリンクを H1 に置き換えたい。
タイトル、ハイパーリンク、アンカーテキストの変更を念頭に置いて、正規表現を使用してこれを行う簡単な方法はありますか?
preg_replace('/<a[^>]*>(\w+)<\/a>/', '<h1>$1</h1>', $subject);
']'は、'>'を除くすべての文字に一致します。'*'は、その前にある0個以上の文字に一致することを意味し、その後に'>'が続き、()内のすべてをキャプチャします。 、'\ w'は任意の単語文字に一致し、+はその前の文字の少なくとも1つの出現に一致し、その後''が表示されます(前方のスラッシュはエスケープする必要があります)。
$ subjectは、HTMLドキュメント全体または文字列のみである可能性があります。
入力が自明ではない場合、これに正規表現を使用することはお勧めしません。複数行の 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();