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

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



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
crimea360
Для этого проще воспользоватся функцией  parse_url

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 12:42 10-05-2007
andead



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
crimea360
echo preg_replace('#(http://.+?)/(.*)#i', '$1', 'http://www.site.ru/partner.php?cat=45');

----------
мой блог

Всего записей: 1821 | Зарегистр. 22-09-2005 | Отправлено: 14:47 10-05-2007
r00t_admin

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
есть строка
 
$var='<option value="1990g">1990 год</option><option value="1991g">1991 год</option><option value="1992g">1992 год</option>';
 
как превратить ее в массив
вида
 
$arr[0]="1990g";
$arr[1]="1991g";
 
и  так далее
 
 
СПАСИБО!!!!
 
 

Всего записей: 62 | Зарегистр. 20-08-2003 | Отправлено: 22:46 13-05-2007
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
r00t_admin
preg_match_all('/value="(\d+)g"/',$var,$matches);
print_r($matches);

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:49 13-05-2007 | Исправлено: Cheery, 22:54 13-05-2007
Jokerjar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Объясните раз и навсегда . Как из текста вытащить в массив все строки [s], удовлетворяющие маске:
 
&nbsp;&raquo; <a href=[*]>[s]</a><BR>
 
где [*] - любая строка.

Всего записей: 591 | Зарегистр. 22-03-2006 | Отправлено: 14:11 14-05-2007 | Исправлено: Jokerjar, 14:21 14-05-2007
Brodyaga



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

Код:
 
<?php
$text=" &nbsp;&raquo; <a href=*>[s1]</a><BR>  
asd
a
da
ds &nbsp;&raquo; <a href=*>[s2]</a><BR> ";
$fst=preg_quote("&nbsp;&raquo; <a href=");//на крайний случай
$scd=preg_quote("</a>");
preg_match_all("#$fst.*>(.*?)$scd#",$text,$matches);
print_r($matches);
?>
 

$matches[1] содержит строки [s1] и [s2]

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

Всего записей: 2713 | Зарегистр. 07-01-2006 | Отправлено: 16:32 14-05-2007 | Исправлено: Brodyaga, 16:35 14-05-2007
just aero



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возможно ли преобразование числа вида 1000000 к виду 1 000 000? Желательно для числа произвольной разрядности. Спасибо.

Всего записей: 13 | Зарегистр. 25-04-2007 | Отправлено: 16:05 25-05-2007
sTa1kEr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
just aero
number_format
Если надо все числа в строке заменить, то через preg_replace_callback

Код:
 
$str = "Numbers 100000000000000000; 20000.00000001; 55.1000000;";
 
echo preg_replace_callback(
   "|(\d+(\.\d+)?)|",  
   create_function('$m', 'return number_format($m[1], 0, ".", " ");'),
   $str);
 
// Numbers 100 000 000 000 000 000; 20 000; 55;
 

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 16:24 25-05-2007 | Исправлено: sTa1kEr, 16:26 25-05-2007
just aero



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо. Работает.
Еще одна просьба. Помогите исправить выражение:

Код:
$str = preg_replace("#[^:]//.*?\n#si", "\n", $str);

Выражение по задумке должно вырезать комментарии из строки. Весь текст после символов // до конца строки должен быть вырезан. При этом должны сохраниться ссылки (напр. http://)
Но в строке:

Код:
\n\nтекст //комментарий 1\n//комментарий2\n

//комментарий2 не вырезается, пока не вставить любой симовол до знаков //.

Всего записей: 13 | Зарегистр. 25-04-2007 | Отправлено: 07:32 26-05-2007
pom205

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как заменить словосочетание в предложениях текста, пока не встретится другой определённый набор сиволов. Т.е. до сивола я знаю. Типа (Слово[^h]+), А вот если вместо ^h нужно набор символов.

Всего записей: 555 | Зарегистр. 03-06-2006 | Отправлено: 07:45 26-05-2007 | Исправлено: pom205, 07:54 26-05-2007
Brodyaga



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

Код:
 
 $str = preg_replace("#[^:]{0,1}//.*?\n#si", "\n", $str);
 

Навскидку, не проверял.

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

Всего записей: 2713 | Зарегистр. 07-01-2006 | Отправлено: 07:46 26-05-2007
sTa1kEr



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

Цитата:
А вот если вместо ^h нужно набор символов.


Код:
 
preg_replace("@foo(?!пока_этот_шаблон_символов_не_встретится_после_foo)@i", "", $str);
preg_replace("@(?<!пока_этот_шаблон_символов_не_встретится_до_foo)foo@i", "", $str);
 

Утверждения
 
Добавлено:
just aero

Код:
 
preg_replace("#(?<!:)//.*#i", "", $str);
 

Так оно, по моему, правильнее.

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 11:52 26-05-2007 | Исправлено: sTa1kEr, 12:13 26-05-2007
just aero



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

Код:
$str = preg_replace("#[^:]{0,1}//.*?\n#si", "\n", $str);

так обрезает ссылки (http://...)
 

Код:
$str = preg_replace("#(?<!:)//.*#i", "", $str);

а вот так работает правильно
переведи на русский язык (?<!:). что это значит?
похоже вот на что:

Цитата:
(?!шаблон) - "заглядывание" вперед по отрицанию

где можно узнать подробнее?

Всего записей: 13 | Зарегистр. 25-04-2007 | Отправлено: 23:27 26-05-2007 | Исправлено: just aero, 23:34 26-05-2007
Cheery



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

Цитата:
где можно узнать подробнее?  

на сайте языка
http://www.php.net/manual/en/reference.pcre.pattern.syntax.php

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:36 26-05-2007
said24



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как из выдачи Яндекса:
 

Код:
<div class="info">
<span style="color:#060;">
forum.ru-board.com/topic.cgi?forum=31
&nbsp;&middot;&nbsp;80&nbsp;КБ
</span>

 
 
 
Выдрать: forum.ru-board.com

Всего записей: 5 | Зарегистр. 28-12-2005 | Отправлено: 04:18 29-05-2007
vitovt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
что-то  торможу, народ, подскажите плз как распарсить такую вот строку
 
07.00, 07.30, 08.30, 09.30, 10.30, 11.00 НОВОСТИ, ЭКОНОМИКА, ОБЗОР ПРЕССЫ, ПРОПУСК В ЕВРОПУ, СПОРТ, ПОГОДА.
чтобы время было отдельно, а текст отдельно?
Заранее сенкс ))

Всего записей: 1087 | Зарегистр. 02-05-2002 | Отправлено: 16:53 09-07-2007
Cheery



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

Цитата:
чтобы время было отдельно, а текст отдельно?  

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

Код:
  $test=" 07.00, 07.30, 08.30, 09.30, 10.30, 11.00 НОВОСТИ, ЭКОНОМИКА, ОБЗОР ПРЕССЫ, ПРОПУСК В ЕВРОПУ, СПОРТ, ПОГОДА";
  preg_match("/([\s\d\.\,]+)(.*)/",$test,$matches);
  print_r($matches);


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 05:49 12-07-2007 | Исправлено: Cheery, 05:49 12-07-2007
vitovt



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

Всего записей: 1087 | Зарегистр. 02-05-2002 | Отправлено: 12:26 18-07-2007
Zver1992

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Использую preg
Есть страничка, её нужно парсить на поиск ссылки на определенный сайт, то есть и выдирать что стоит между <a></a>. Как бы поудобней оформить регулярное выражение? Сайт узнаем из переменной $_POST['site'] и эта строка представляет собой "домен.зона", например: stalkerz.ru

Всего записей: 599 | Зарегистр. 30-10-2004 | Отправлено: 20:37 30-07-2007
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Zver1992
просмотреть тему с начала. мусолили уже не раз.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:42 30-07-2007
Открыть новую тему     Написать ответ в эту тему

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