Помогите с регуляркой

Статус
В этой теме нельзя размещать новые ответы.
PHP:
$text = 'слово || слово2 || слово3';
$per = explode(' || ', $text);
echo '<pre>';
print_r($per);
 
нужна помощь, необходимо редактировать текст, не трогая текст обрамленный html тегами. т.е. только текст который находится не внутри тегов. нужно найти нужное слово и заменить его на <a href="">этоже слово </a> но только в тексте который находится не внутри тегов. вот пример
PHP:
A <a rel="nofollow" href="/index.html">woman sex-hungry</a> grown-up makes all her <a rel="nofollow" href="/all-her-sexual-dreams/index.html">sexual dreams</a> come true with a <a rel="nofollow" href="/index.html">couple</a> of well-packed <a rel="nofollow" href="index.html">guys</a>
<a rel="nofollow" href="all-her-sexual-dreams/index.html"><img id="image1739" title="A aged woman has wild sex with 2 stallions" src="_resize2.jpg" alt="A aged woman has wild sex with 2 stallions" /></a>
<h3><span style="text-decoration: underline;">
<h3><span><a rel="nofollow" href="account=12564">Golden-haired legal age teenager that likes the taste of penis receives screwed
</a></span></h3>
</span><a rel="nofollow" href="account=12564"></a><a rel="nofollow" href="12564"><img title="A aged woman has wild sex with 2 stallions" src="468x60.gif" border="0" alt="A aged woman has wild sex with 2 stallions" /></a></h3>Private assemblage of the sexiest discreet videos sold to the horniest collector ever!
The cuties on PrivateTeenVideo.com had no idea that their most intimate moments would be sold to this lustful woman collector of porn.
поиск и замену нужно только в чистом тексте не меняя того что внутри тегов, реально реализовать это? допустим найти слово woman и заменить его на <a href="">woman</a> но не трогая слово woman в альтах тайтлах и анкорах дабы не портить общий html код.
 
вот пример, разбивает html код на элементы регуляркой, и производит поиск-замену: кроме самих тегов и вне зоны их действия
также есть список игнорируемых тегов, где текст принимается как обычный

PHP:
$html = file_get_contents('file.htm');

$find_replace = array( // список поиск => замена (регистрозависимый)
'woman'=>'<a href="woman.html">woman</a>',
'free chat'=>'<a href="free_chat.html">free chat</a>',
'google'=>'<a href="http://google.com/">google.com</a>',
);

// игнорируемые теги
$ignore_tags = '<body></body><tbody></tbody><html></html><table></table><head></head>';

$ignore_tags_arr = preg_split('/[<]/',$ignore_tags,-1,PREG_SPLIT_NO_EMPTY);
foreach ($ignore_tags_arr as $i_tag) { $i_tag = '<'.$i_tag;
$ec[$i_tag] = md5($i_tag); $dc[md5($i_tag)] = $i_tag; }
$html = strtr($html,$ec);

// разделение html кода на элементы
$parts = preg_split('/(<(?:\?[^?]+\?>|[A-Za-z]+(?:[^">]+|"[^"]*")*|!(?:\[CDATA\[(?:[^\]]+|](?:[^\]]|][^>]))*]]|--(?:[^-]+|-(?!->))*--))>)/', $html, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);

foreach ($parts as $part) {

if ($part[0]=='<' AND $part[strlen($part)-1]=='>') { $res_html .= $part; continue; }
	
$p_arr = preg_split('/<[^>]+>/',$part);
$p_search = $p_arr[count($p_arr)-1];
$p_replace = strtr($p_search,$find_replace); // замена
$part = preg_replace('.'.quotemeta($p_search).'$.',$p_replace,$part);		
$res_html .= $part; }
$res_html = strtr($res_html,$dc);

echo $res_html; // result
 
помогите, плз, написать ругулярку, чтобы удаляла из текста все лишние символы
на выходе должны оставаться только буквы, цифры и знаки препинания.
 
PHP:
$text = 'qweйцу.,!&2@@@1';
$text = preg_replace('/[^а-яА-Я\w\d\.,!?]/u', '', $text);
echo $text;
расситано на UTF-8 строки с русскими буквами
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху