Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Регулярные выражения (RegExp, Regular, eregi, preg)

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Открыть новую тему     Написать ответ в эту тему

Rendom



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Учебники регулярных выражений
 
Кто сможет составить выражение для такого случая:

Код:
 
<table border=0>
<tr>
   <td>blablablabla<table border=0><tr><td>blablabla_UNIQTEXT_blablabla</td></tr></table></td>
   <td><table border=1><tr><td>blablabla</td></tr></table>666666</td>
</tr
</table>
 

Нужно удалить из этого всего кусок "<table border=0><tr><td>blablabla_UNIQTEXT_blablabla</td></tr></table>". Иными словами нужно вырезать текст от "<table" до "</table>" внутри которого есть строка "UNIQTEXT", но при этом не удалить лишнего. В результате должно получиться:

Код:
 
<table border=0>
<tr>
   <td>blablablabla</td>
   <td><table border=1><tr><td>blablabla</td></tr></table>666666</td>
</tr
</table>
 

Всего записей: 115 | Зарегистр. 27-10-2002 | Отправлено: 23:26 17-05-2005 | Исправлено: AZJIO, 04:05 09-12-2014
N Sensey N



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
если текст уникальный - почему проcтой str_replace не заюзать?

----------
sPaiz-Nuke - Free PHP CMS Web Design and Development Портал для израильтян

Всего записей: 1409 | Зарегистр. 01-10-2002 | Отправлено: 00:02 18-05-2005
Rendom



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
N Sensey N

Цитата:
если текст уникальный - почему проcтой str_replace не заюзать?

Да мне же не сам текст нужно удалить, но и все что его окружает тоже, но ограничено какими-то тегами.

Всего записей: 115 | Зарегистр. 27-10-2002 | Отправлено: 00:05 18-05-2005 | Исправлено: Rendom, 00:10 18-05-2005
Zeroglif

...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
s=s.replace(/(<td>.*)(<table.+UNIQTEXT.+table>)/,'$1')

Всего записей: 2105 | Зарегистр. 19-05-2003 | Отправлено: 10:11 18-05-2005
Farkhad



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
preg_replace("{<td>[^<table]*?(<table border=0.+UNIQ_TEXT[^</table>]+?</table>)}xi", "", $string);

Всего записей: 731 | Зарегистр. 03-08-2001 | Отправлено: 22:30 18-05-2005
Rendom



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем спасибо, я разобрался!

Всего записей: 115 | Зарегистр. 27-10-2002 | Отправлено: 01:19 20-05-2005
Smog



Жираф-Сибиряк
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всем!
 что-то мне не соображается....
 
$found[1][0]="(ABCDF),(BCDGER),(DFERO),(VOIUY)";
preg_match_all("/\([A-Z]+\)/",$found[1][0],$found2);
выдает  
 

Цитата:
 
 
Array ( [0] => Array ( [0] => (ABCDF) [1] => (BCDGER) [2] => (DFERO) [3] => (VOIUY) ) )

 
как сделать, чтобы скобок не было?

Всего записей: 5394 | Зарегистр. 20-06-2003 | Отправлено: 13:38 11-06-2005
Advanced_Guest



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smog

Код:
 
$found[1][0]="(ABCDF),(BCDGER),(DFERO),(VOIUY)";  
preg_match_all("/\(([A-Z]+)\)/",$found[1][0],$found2);
 
print_r($found2[1]);
 


----------
The Abyss - UO, LA2, Ботва, BSFG

Всего записей: 2446 | Зарегистр. 14-04-2002 | Отправлено: 13:43 11-06-2005
SoftNews

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго всем дня,
 
имеется переменная вида
 

Код:
$image = "http://website.com/images/image.jpg";

 
каким образом можно при помощи регулярных выражений и pregreplace заменить ее на  
 

Код:
$image = "http://website.com/images/thumbs/image.jpg";

 
путь к файлу и сам сам файл может быть любым.
 
Спасибо,

Всего записей: 121 | Зарегистр. 19-06-2003 | Отправлено: 15:27 14-06-2005
Advanced_Guest



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SoftNews
Поподробнее задачу распиши (а точнее примеры)
 
Основная проблема: "к чему привязывать замену"
 
Например то что сейчас возможно>
1. все images заменить на images/thumbs (тогда > php.net/str_replace)
2. к перед последним слешем добавить строку "/thumbs" (Тогда регулярное выражение примерно $txt=preg_replace(#(.*)/(.*)#i, "\$1/thumbs/\$2",$txt);  но не проверял)
 
Возможно ещё какие нибуть варианты.

----------
The Abyss - UO, LA2, Ботва, BSFG

Всего записей: 2446 | Зарегистр. 14-04-2002 | Отправлено: 21:05 14-06-2005
SoftNews

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Задача в принципе вот в чем идет разбор bb кодов в тексте
 
если использовать
 

Код:
 
$find="'\[THUMB\](.*)/(.*)\[/THUMB\]'i";
 
$replace="<a href=\"javascript:\" onClick=\"ShowBild('\$1/\$2');\" ><img src=\"\$1/thumbs/\$2\" style=\"border: none;\" alt=\"Увеличить картинку\" /></a>";

 
то это работает если этот код всречается всего один раз в тексте если несколько то ничего не работает. Я так понимаю это связано с жадностью квантификаторов, немогу никак понять как побороть это ихнее жлобство. И еще вопрос как сделать чтобы это корректно работало если в URL стоят обратные слеши.
 
Заранее благодарю,

Всего записей: 121 | Зарегистр. 19-06-2003 | Отправлено: 03:00 15-06-2005 | Исправлено: SoftNews, 03:01 15-06-2005
Advanced_Guest



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ungreedy:
$find="'\[THUMB\](.*?)/(.*?)\[/THUMB\]'i";
 
ещё и другие слеши:
 
$find="'\[THUMB\](.*?)([/\\])(.*?)\[/THUMB\]'i";
 
 
правда замена теперь будет:
 
 
$replace="<a href='#' onClick=\"ShowBild('\$1\$2\$3');\" ><img src='\$1\$2thumbs\$2\$3' style='border: none;' alt='Увеличить картинку'></a>";

----------
The Abyss - UO, LA2, Ботва, BSFG

Всего записей: 2446 | Зарегистр. 14-04-2002 | Отправлено: 09:38 15-06-2005
SoftNews

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Advanced_Guest
 
К сожалению не работает, этот тег и текст в нем остается неизменным

Всего записей: 121 | Зарегистр. 19-06-2003 | Отправлено: 13:20 15-06-2005
Advanced_Guest



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SoftNews
Ошибочка вышла:
$find="'\[THUMB\](.*?)([/\\\\])(.*?)\[/THUMB\]'i";  
 

Код:
 
$find="'\[THUMB\](.*?)([/\\\\])(.*?)\[/THUMB\]'i";  
$replace="<a href='#' onClick=\"ShowBild('\$1\$2\$3');\" ><img src='\$1\$2thumbs\$2\$3' style='border: none;' alt='Увеличить картинку'></a>";
$string="[THUMB]abc/def[/THUMB]\n[THUMB]gef\hef.gic[/THUMB]";
echo htmlspecialchars(preg_replace($find,$replace,$string));
 

работает

----------
The Abyss - UO, LA2, Ботва, BSFG

Всего записей: 2446 | Зарегистр. 14-04-2002 | Отправлено: 13:37 15-06-2005
SoftNews

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
при использовании  
 

Код:
$find="'\[THUMB\](.*?)([/\\\\])(.*?)\[/THUMB\]'i";

замена происходит после нахождения первого слеша т.е.

Код:
[THUMB]http://website.com/test/images/image.jpg[/THUMB]
заменяется на http://website.com/thumbs//website.com/test/images/image.jpg

 
а надо чтобы это был последний слеш

Всего записей: 121 | Зарегистр. 19-06-2003 | Отправлено: 14:28 15-06-2005
Advanced_Guest



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SoftNews
а так ?  
$find="'\[THUMB\]([^\[]*)([/\\\\])(.*?)\[/THUMB\]'i";  

----------
The Abyss - UO, LA2, Ботва, BSFG

Всего записей: 2446 | Зарегистр. 14-04-2002 | Отправлено: 14:41 15-06-2005
SoftNews

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Advanced_Guest
 
Ура свершилось чудо заработало, спасибо друг
 
а можешь написать по русски что означает ([^\[]*) а то хочется все таки разобраться в самом принципе, почему именно так.

Всего записей: 121 | Зарегистр. 19-06-2003 | Отправлено: 15:05 15-06-2005 | Исправлено: SoftNews, 15:07 15-06-2005
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Однозначно вам поможет ссылка http://www.php.net/manual/ru/reference.pcre.pattern.syntax.php
 
Символьный класс соответствует одиночному символу обрабатываемой строки, причем сам символ должен содержаться в наборе, определяемым классом. В случае, если первым символом описания класса является '^', логика работы инвертируется: класс соответствует одиночному символу, который не содержится в наборе, определяемым классом. Если символ '^' необходим как член класса, его не следует помещать первым символом в описании класса либо необходимо экранировать при помощи обратного слеша.
 
К примеру, символьный класс [aeiou] соответствует любой гласной букве в нижнем регистре, в то время, как [^aeiou] соответствует любому символу, не являющемуся гласной буквой нижнего регистра. Следует понимать, что символ '^' всего лишь удобный инструмент для описания символов, не используемых в сопоставлении.

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 18:12 15-06-2005 | Исправлено: Delphi6, 19:12 15-06-2005
Advanced_Guest



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SoftNews
 
 ([^\[]*)  
 
 () Скобки - что надо "захватывать" результат
 
первая и последняя [] - класс, то есть [abc] - любая буква из abc  
 
вариант [^abc] - любой символ кроме abc.
 
У нас же [^\]] - Любой символ кроме \] а \] - Это ] (который мы обычным способом записать не можем, ибо это завершение символьного класса).
 
* - много раз повторять.
 
То есть такое ([^\[]*)  можно читать как : Захватить любое количество любых символов подряд кроме символа ]

----------
The Abyss - UO, LA2, Ботва, BSFG

Всего записей: 2446 | Зарегистр. 14-04-2002 | Отправлено: 15:10 16-06-2005
quasar



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
edit: разобрался

Всего записей: 398 | Зарегистр. 29-01-2002 | Отправлено: 13:33 06-01-2006 | Исправлено: quasar, 13:39 06-01-2006
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Регулярные выражения (RegExp, Regular, eregi, preg)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru