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

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

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

 

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

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

тема: Условный поиск при помощи регулярных выражений
 
 автор: Zilog   (22.02.2008 в 17:25)   письмо автору
 
 

1. Ищу слово в тексте. Нужно найти то, которое соответствует заданному, и не является ссылкой.
2. Хочу заменить найденное слово на ссылку - как мне это сделать в рамках одного оператора (preg_replace) ?

Товарищи спецы, на вас вся надежда - всю голову сломал рег. выражениями...


упс. Прощу прощения, не в тот форум зпостил. Ув. модераторы, переместите, пожалуйста, тему в "Рег. выражения"

   
 
 автор: Dimon_K   (22.02.2008 в 18:37)   письмо автору
 
   для: Zilog   (22.02.2008 в 17:25)
 

Я не знаю какие требования к словам которые вы будете искать, но допустим такой вариант:

$text="Привет от somebody@mail.ru!";
$htnl=preg_replace('/ (S+) @ ([a-z0-9.]+) /is', '<a href="mailto:$0">$0</a>', $text);


В переменную $0 попадает вся совпавшая строка ее мы и подстовляем

   
 
 автор: Zilog   (22.02.2008 в 19:14)   письмо автору
 
   для: Dimon_K   (22.02.2008 в 18:37)
 

>В переменную $0 попадает вся совпавшая строка ее мы и подстовляем

Дим, спасибо большое, сейчас буду изучать.
Но уже есть два вопроса
1. как данные оказались в этой переменной?
2. что будет, если $text="Привет от <a href=mailto:>somebody@mail.ru!</a>"? Ведь в тексе может оказаться, что искомое слово - ссылка!

Требования к словам простые: найли слова, имя список на руках, и сделать их ссылками, пропуская то, что уже является ссылками.


проверил предоставленный пример - неработает (просто скопипастил, и вывел на экран $htnl)

   
 
 автор: Zilog   (22.02.2008 в 19:44)   письмо автору
 
   для: Zilog   (22.02.2008 в 19:14)
 

и ещё вопрос - как искасть СЛОВО, а не ехо вхождение в другое СЛОВОсочетание?

Добавлено: разобрался, надо подставить \s. Только в этом случае, ссылка получается с пробелом - как этого избежать?

   
 
 автор: ddhvvn   (22.02.2008 в 23:41)   письмо автору
 
   для: Zilog   (22.02.2008 в 19:44)
 

не включать пробел в извлекаемые данные (\s вынести за скобки)

   
 
 автор: Zilog   (23.02.2008 в 01:47)   письмо автору
 
   для: ddhvvn   (22.02.2008 в 23:41)
 

>не включать пробел в извлекаемые данные (\s вынести за скобки)

вот как я делаю:

$text = preg_replace("/$key\s/ i","<a href=$url>$0</a>",$text);


если $key заключить в скобки, то все равно ничего не изменится.

   
 
 автор: _гость_   (23.02.2008 в 07:07)
 
   для: Zilog   (23.02.2008 в 01:47)
 

просще наверное так
<?php
$txt 
= <<<TXT
текст<br />
<a href=""><i>слово</i></a>
 <a href="">ещё</a> слово
много слов
TXT;
echo 
htmlspecialchars(preg_replace('#(\bслово\b)(?!((?!<a).)*</a)#s' ,
 
'<a href="слова">$1</a>'  $txt));
?> 

   
Rambler's Top100
вверх

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