Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Заменить слово на ссылку
 
 автор: AleksNN   (11.08.2010 в 12:59)   письмо автору
 
 

Необходимо заменить слово на ссылку, естественно, если оно уже не находится внутри ссылки.

С помощью утверждений (?<!) и (?!) не получается учесть ни мусор, который может быть с искомым текстом, ни атрибутов ссылки:
(?<!\<a\>) SOME_TEXT (?!\<\/a\>)


Мусор можно учесть с помощью символьного типа \W:
(^|[\W]+)SOME_TEXT($|[\W]+)


Но объединить их не получается.

Исходник тестов:


$p = 'text';

echo '<h2>Замена слова на ссылку с помощью утверждений</h2>';

$test[] = '<a> text ';
$test[] = '<a>  text ';
$test[] = '</a> text ';
$test[] = ' text <a>';
$test[] = ' text </a>';
$test[] = '<a> text </a>';
$test[] = ' text <a> text';
$test[] = '<a> text </a> text ';



foreach ($test as $key => $val) {

  echo preg_replace('/(?<!\<a\>) ('.$p.') (?!\<\/a\>)/', '<a href="">$1</a>', $val).'<br />'."\r\n";
}


unset($test);

echo '<h1>Замена слова на ссылку с учетом мусора</h1>';

$test[] = 'textffdd text';
$test[] = 'text textEFff';
$test[] = '.text,';
$test[] = '<a href="">  fds text.. </a>  //\text"""';
$test[] = '!text<';
$test[] = '<a href="">text</a>2""/\text';

foreach ($test as $key => $val) {

  echo preg_replace('/(^|[\W]+)('.$p.')($|[\W]+)/', '$1<a href="/">$2</a>$3', $val).'<br />'."\r\n";
}

  Ответить  
 
 автор: Tonik992   (11.08.2010 в 18:08)   письмо автору
 
   для: AleksNN   (11.08.2010 в 12:59)
 

Можешь попробовать вот эту регулярку. Для двух случаев работает, как и твои варианты каждый по отдельности..

<?php
echo preg_replace('/(?<![\w\d]|<a>\040)('.$p.')(?![\w\d]|\040<\/a>)/','<a href="">$1</a>'$val).'<br />'."\r\n";

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования