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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
paulvasykov

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Delphi6
можете привести весь пример скрипта где все ложиться?
 
http://www.crxprivate.com/?pagem=tips&pagein=crxgrabber
 
Используються шаблоны (template.tmpl.php). Вот именно на этом шаблоне скрипт валиться.
 
Попробовал ставить 128 метров, на php4, тоже самое.
На php5 умирает толи php, толи аппач, после запуска этого скрипта.  
и web сервер не работает. Приходиться перезагружать appatch весь.

Всего записей: 4 | Зарегистр. 02-07-2007 | Отправлено: 19:49 02-01-2008
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
paulvasykov
Сори за позний ответ, были проблемы со своими скриптами Я запустил 1.php и он выдал результат. Какой из файлом мне надо открыть что бы увидеть баг? grab.php grabber.php или 1.php (этот работает).

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 04:47 06-01-2008
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В строке может содержаться переносы на новую строку (парсится текстовый файл).
Необходимо удалить все между ключевыми словами (begin и end, к примеру):
Данный код не удаляет символы между ключевыми словами, так как есть перенос на другую строку:

Код:
$c= '111beginDROP TABLE IF EXISTS "gallery_albums";CREATE TABLE "gallery_albums"
)end222';
 
echo preg_replace('#begin(.*)end#', '', $c);

Без переноса все работает корректно.

----------
comming soon..

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 19:52 06-01-2008
Brodyaga



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
6epcepk
Попробуй использовать модификатор s:

Цитата:
<?php
$c= '111beginDROP TABLE IF EXISTS "gallery_albums";CREATE TABLE "gallery_albums"
)end222';
 
echo preg_replace('#begin(.*)end#s', '', $c);
?>



----------
Damn Metal

Всего записей: 2713 | Зарегистр. 07-01-2006 | Отправлено: 21:14 06-01-2008
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Brodyaga
Спасибо, все получилось (:

----------
comming soon..

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 17:03 07-01-2008
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вот что-то опять не получается сделать маску удаления, совсем я плох в регулярных выражениях (:

Код:
$s = "(50, 47, '', 'modules/news/news/js/delete.js', 'bogus', '720', '480', 3, 0),
(51, 47, '', 'modules/news/news/js/card.js', 'bogus', '720', '480', 3, 0),";
 
echo preg_replace("#\([0-9a-z], [0-9a-z], '', '(.*)', '[0-9a-z]', '[0-9a-z]', '[0-9a-z]', [0-9a-z], [0-9a-z]\),\n#", '', $s);

Надо чтобы вырезала эти все строки.
Спасибо.

----------
comming soon..

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 23:27 07-01-2008
Andrej_k



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите, не могу сооброзить,  
 
if ($bodytext == "") {$content  =  "$hometext";} else {$content  =  "$bodytext";} #  
// ну или empty($bodytext)
 
Все прекрасно работает, до тех пор, пока в $bodytext не встречаются пробелы....
 
можно конечно в $bodytext предварительно убрать пробелы, но принципиально, может есть другое, более изящное решение?
 
 
 
Добавлено:
наверное без вариантов,  
$bodytext = trim($bodytext);

Всего записей: 62 | Зарегистр. 01-12-2003 | Отправлено: 08:34 12-01-2008 | Исправлено: Andrej_k, 08:36 12-01-2008
Brodyaga



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

Код:
 
<?php
$s = "(50, 47, '', 'modules/news/news/js/delete.js', 'bogus', '720', '480', 3, 0),
(51, 47, '', 'modules/news/news/js/card.js', 'bogus', '720', '480', 3, 0),";
 
echo preg_replace("#\(([0-9a-z]+),(\s*)([0-9a-z]+),(\s*)'',(\s*)'(.*?)',(\s*)'([0-9a-z]*)',(\s*)'([0-9a-z]*)',(\s*)'([0-9a-z]*)',(\s*)([0-9a-z]+),(\s*)([0-9a-z]+)\),(\s*)#", '', $s);
?>
 

smth like this, но не все однозначно со значениями в этих скобках. Но для данного примера работает(не оптимизировано!)
 
Andrej_k
Причем здесь регулярные выражения? Конечно, чтобы проверить строку на "нулевое" значение нужно её лишить возможных пробелов, потому что это тоже символы, такие же как цифры или буквы.

----------
Damn Metal

Всего записей: 2713 | Зарегистр. 07-01-2006 | Отправлено: 11:28 12-01-2008
folter



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

Код:
preg_replace ("~[^tex]~", "", "ishodnaya tex stroka tex"); // удаляет из строки все символы кроме "t", "e" и "x"

Как правильно составить паттерн, чтобы удалялись не отдельно символы кроме перечисленных, а удалялось все кроме последовательности этих символов "tex"?

Всего записей: 75 | Зарегистр. 26-03-2006 | Отправлено: 18:00 17-01-2008
VXC



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ихвиняюсь если не свосем по адрессу.
Суть такова:
Есть поле <textarea> куда забивается текст комментария/новости
Нужно чтобы скрипт автоматически определял новую строку и вставлял <br>.Ну чтобы все в одну строку не мешалось.Подскажите в какую сторону копать

Всего записей: 68 | Зарегистр. 10-02-2005 | Отправлено: 10:43 18-01-2008
Brodyaga



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

Код:
 
$text=nl2br($text);
 


----------
Damn Metal

Всего записей: 2713 | Зарегистр. 07-01-2006 | Отправлено: 10:53 18-01-2008
VXC



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

Всего записей: 68 | Зарегистр. 10-02-2005 | Отправлено: 12:32 18-01-2008
andead



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
чёто я застрял с регуляркой, никак не получается разложить вот такую строку:

Код:
price.php?a=showGoodsList&category=1-&sortOn=name&sortAs=asc

на

Код:
Array
(
    [0] => price.php?a=showGoodsList&category=1-&sortOn=name&sortAs=asc
    [1] => price.php?a=showGoodsList&category=
    [2] => 1-
    [3] => &sortOn=name&sortAs=asc
)

 
"1-" может быть любым набором символов кроме &
 
пробовал вот так, но не выходит(( помогите пожалуйста
 

Код:
<?php
 
$varName = "price.php?a=showGoodsList&category=1-&sortOn=name&sortAs=asc";
preg_match('/(.*category=)(.*)(\&??.*)/', $varName, $match);
 
echo $varName . '<br /><pre>';
print_r($match);
echo '</pre>';
 
?>

Всего записей: 1821 | Зарегистр. 22-09-2005 | Отправлено: 19:59 31-01-2008 | Исправлено: andead, 20:01 31-01-2008
kivan



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

Код:
 
<?php
 
$varName = "price.php?a=showGoodsList&category=1-&sortOn=name&sortAs=asc";  
preg_match_all('/(.*category=)(.+?)(&.+)/i', $varName, $result, PREG_PATTERN_ORDER);
 
print_r($result);
 
?>
 


----------
There are 10 kinds of people in the World...
Those who understand binary, and those who dont!

Всего записей: 341 | Зарегистр. 23-11-2004 | Отправлено: 19:05 01-02-2008
andead



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

Всего записей: 1821 | Зарегистр. 22-09-2005 | Отправлено: 15:48 02-02-2008
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Очень странно, по идее данное регулярное выражение должно удалять все пустые строки.

Код:
$str = "
 
 
sdf
 
df
 
";
 
$contents = preg_replace('#^$#s', "", $str);
die(nl2br($contents));

Но ничего подобного не происходит.
 
пс: Brodyaga

----------
comming soon..

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 18:11 15-02-2008
Delphi6



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

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

Не совсем, оно будет удалять "ничего", потому что оно не будет задевать символ "\n" который в конце стоки. Надо делать что-то в это роде:

Код:
<?php
$str = "
     
 
 
 
sdf
 
df
 
";
 
$contents = preg_replace('#^\s*$\n#m', '', $str);
die(nl2br($contents));
?>

для начала флаг m который указывает что текст воспринимать как многострочный, потом надо учесть что строка может содержать пробелы "\s*", ну и конечно после "$" надо добавить перенос строки (и возврат каретки при необходимости) что бы и его захватить

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 22:55 15-02-2008 | Исправлено: Delphi6, 00:21 16-02-2008
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Действительно, так. Или я не правльно понял или в книжке Котерова неправильно написано...

----------
comming soon..

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 23:40 15-02-2008
Delphi6



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

Цитата:
Действительно, так. Или я не правльно понял или в книжке Котерова неправильно написано...

Не могу точно сказать почему в строку не включается перенос строки, наверно символ $ указывает на конец строки без "переноса на новую строку" и "возврат каретки". Я это случайно заметил давно, когда дебагил свой скрипт в пошаговом режиме.

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 00:20 16-02-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Delphi6
а как же виндовый перенос \r\n?
 

Цитата:
Не могу точно сказать почему в строку не включается перенос строки, наверно символ $ указывает на конец строки без "переноса на новую строку" и "возврат каретки". Я это случайно заметил давно, когда дебагил свой скрипт в пошаговом режиме.

именно

Цитата:
hen this modifier is set, the "start of line" and "end of line" constructs match immediately following or immediately before any newline in the subject string, respectively, as well as at the very start and end

именно поэтому, по сути, строка "удаляется", но перенос то остается..
так что я бы сделал, наверно, так
$contents = preg_replace('/^\s*\r?\n/m', "", $str);  
правда и тут особенность - под маками новая строка как раз \r

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 04:15 16-02-2008 | Исправлено: Cheery, 04:17 16-02-2008
Открыть новую тему     Написать ответ в эту тему

Страницы: 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