Я пишу регулярное выражение поиска / замены, которое вставит <span>
в каждый <a href>
в файле, где <span>
еще не существует. Это позволит другим тегам быть в <a href>
как <img>
, <b>
и т. Д.
В настоящее время у меня есть это регулярное выражение:
Найти: (<a[^>]+?style=".*?color:#(\w{6}).*?".*?>)(.+?)(<\/a>)
Заменить: '$1<span style="color:#$2;">$3</span>$4'
Он отлично работает, за исключением случаев, когда я запускаю его поверх того же файла, он вставит <span>
внутрь <span>
и станет грязным.
Пример цели:
Мы хотим, чтобы это игнорировалось:
<a href="http://mywebiste.com/link1.html" target="_blank" style="color:#bfbcba; text-decoration:underline;"><span style="color:#bfbcba;">Howdy</span></a>
Но не это:
<a href="http://mywebiste.com/link1.html" target="_blank" style="color:#bfbcba; text-decoration:underline;">Howdy</a>
или это:
<a href="http://mywebiste.com/link1.html" target="_blank" style="color:#bfbcba; text-decoration:underline;"><img src="myimg.gif" />Howdy</a>
- EDIT -
Используя библиотеку PHP DOM, как было предложено в комментариях, это то, что я имею до сих пор:
$doc = new DOMDocument();
$doc->loadHTML($input);
$tags = $doc->getElementsByTagName('a');
foreach ($tags as $tag) {
$spancount = $tag->getElementsByTagName("span")->length;
if($spancount == 0){
$element = $doc->createElement('span');
$tag->appendChild($element);
}
}
echo $doc->saveHTML();`
В настоящее время он обнаружит, есть ли промежуток внутри якоря, и если он есть, он добавит промежуток к внутренней части якоря, однако мне еще предстоит выяснить, как получить исходное содержимое якоря внутри пролет