Регулярные выражения

  • Автор темы Автор темы Stierus
  • Дата начала Дата начала

Stierus

Новичок
Регулярные выражения

Здравствуйте. Мне необходимо пройтись по всему тексту и заменить все вхождения подстроки (для примера "test" ) в этом тексте на новую подстроку (допустим "!test!"). Всё было бы отлично, но мне необходимо заменять только отдельные слова ( например подстрока testing не должна меняться на !test!ing ) , так же при замене должны выполняться условия : найденая подстрока не должна быть частью ссылки (<a href=""> some text test<a/> должно игнорироваться) инайденая строка не должна быть внутри тега (<img alt="test"> так же должно игнорироваться) .

делается это для реализации глоссария, который будет парсить текст и подставлять ссылки на известные документы, упоминаемые в тексте.

Сейчас сделано, что бы игнорировались совпадения в ссылках и частях слова, но у меня не получается справиться с совпадением внутри тега. использовать опережающую проверку не получается (мы не знаем длину строки, где искать начало тега), с условиями никак не могу разобраться (мне необходимо что бы регулярное выражение возвращало найденое вхождение (используется регистронезависимый поиск, необходимо что бы регистр ссылки был такой же, как регистр первоначальной фразы)
 
Вообщем при помощи preg_split попробывать разбить, при помощи preg_match сделать кучу логических проверок и если условия хороши preg_replace.
 
задача решена, chown, спасибо за ссылку хоть и не пригодилась
 
Здесь обычно пишут каким именно образом была решена задача. Пример кода так же в подобных случаях обычно вставляют в тред. ;)
 
Добавил ещё одно постусловие на отсутствие закрытия тега ( раньше пытался найти открытие тега - это не получилось из-за фиксированости длины анализируемой пред-строки, у постусловий такого ограничения нет ) ... всё оказалось не сложно, просто надо было немног отвлечься от начального замысла :)
 
Подобная задача: необходимо в переменной $a проверить, имеется ли в ней окончание $b (например для слова супермен условие выполнится, если $b="мен")

preg_match("$b$",$a)
- огадываюсь, что переменную в регулярке надо заэкранировать, но не знаю как. Подскажите.
 
if (strpos($a,"/[а-я]b$")==true)...

так не получается вычислить, содержит ли строку

решил путём добавления пробела и в концы переменных, однако, думаю, некрасивое решение
 
2claygod

$a = 'Супермен';
$b = 'мен';

if (stripos($a, $b) === strlen($a) - strlen($b))
echo 'Suxe$!';

у меня работает
 
Сверху