php regexp обход тегов

программирование php JavaScript веб дизайн regexp

При сохранении текста в базу, нужно все латинские слова выделить курсивом. Текст берется из tinymce, т.е. в базу заносится с тэгами. Как выделить все латинские слова курсивом, но при этом не трогать тэги?
Попробовал сделать так:

$string = $data['Text'];;
$pattern = "#(?<=^|>)[^><]+?([a-z]+)#i";
$replacement = "<i> $1 </i>";
echo preg_replace($pattern, $replacement, $string);

Но не совсем правильно работает. Например, если перед латинским словом идет русский текст, то он убирается и началом становится первое латинское слово.

Примечание:
Спасибо. Так гораздо лучше) А можно как то в это условие добавить обход спец. символов типа &laquo; &raquo; и т.п., то есть видимо то что начинается с амперсанда и заканчивается точкой с запятой. Думал сделать через str_replace, заменять на какие то буквосочетания, а после применения preg_replace возвращать обратно. Но кажется это какая то хрень громоздкая и не совсем правильная..

Примечание:
Спасибо большое. Вроде разобрался
Ответы:
попробуйте начать со следующего
<?php
$string = "<h1>проверка replace в строке string проверка replace в строке string тут first </h1>
               <div>проверка replace в строке string проверка replace в строке string тут second </div>
               <p>проверка replace в строке string проверка replace в строке string тут third</p>";
$pattern = "#(?<!<)\b([a-z]+)\b(?!>)#i";
$replacement = "<i>$1</i>";
echo preg_replace($pattern, $replacement, $string);
?>


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.