Я пишу глоссарий - он должен найти известные слова в тексте и заменить его ссылкой. Он не должен заменять слово, если это ссылка ancor (<a href="...">word</a>
) или атрибут (<span class="word">...</span>
).Regex for glossary replace
Я написал код:
$x = '<div>DVB-S2. DVB-S. DVB-S2DVB-S <sss DVB-S2 /> DVB-S2 <a href="dd">DVB-S2</a> DVB-S2 Hot bird 6/Hot Bird 8/Hot bird 9, 13.0</div>';
$word = 'Hot Bird 8';
$x = preg_replace("'(?<=[\s\>])(" . $word . ")(?=[^\d\w\-])(?!([^<]+)?>)'is", "<a href=\"s2\">$1</a>", $x);
$word = 'DVB-S2';
$x = preg_replace("'(?<=[\s\>])(" . $word . ")(?=[^\d\w\-])(?!([^<]+)?>)'is", "<a href=\"s2\">$1</a>", $x);
echo $x;
Но заменить <a href="dd">DVB-S2</a>
на <a href="dd"><a href="s2">DVB-S2</a></a>
.
Как это исправить?
ив тестирование кода и Ive заметил, что первый preg_replace ничего не делает – abugnais
Более важным является второй регулярное выражение и проблемы с заменой якоря. – gvozd1989
Вы хотите заменить исходный тег, если он существует? – abugnais