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

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



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

Цитата:
правда и тут особенность - под маками новая строка как раз \r

Я вот базируясь на твоем подходе немного до модернизировал, думаю сработает (не могу на практике проверить);

Код:
$contents = preg_replace('#^\s*(?:\n|\r|\r\n)#m', '', $str);


Цитата:
then 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

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

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



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

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

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



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

Код:
 
<tr><td class=wblight align=right>&nbsp;<a href='test.php?id=5751'>-----22:50-----</a>&nbsp;</td><td class=wblight><table border=0 cellpadding=0 cellspacing=0><tr><td>&nbsp;</td><td><table border=0 cellspacing=0 cellpadding=0><tr><td><img width=24 height=24 src='i/logo.gif' border=0 title='logo'></td><td>-----text1-----</td></tr></table></td><td>&nbsp;</td></tr></table></td><td class=wblight align=center>&nbsp;<font color='000000'><b>-----28-----</b></font>&nbsp;</td></tr><tr>
<td class=wblight align=right>&nbsp;<a href='test.php?id=5750'>-----22:40-----</a>&nbsp;</td><td class=wblight><table border=0 cellpadding=0 cellspacing=0><tr><td>&nbsp;</td><td><table border=0 cellspacing=0 cellpadding=0><tr><td><img width=24 height=24 src='i/logo.gif' border=0 title='logo'></td><td>-----text2-----</td></tr></table></td><td>&nbsp;</td></tr></table></td><td class=wblight align=center>&nbsp;<font color='000000'><b>-----10-----</b></font>&nbsp;</td></tr>
 

 
Мне нужно вытащить отсюда  id, время (-----22:50-----, -----22:40-----  ), текст (-----text1-----, -----text2-----), число (-----28-----, -----10-----).
тоесть мне нужно сформировать 2 инсерта в базу. Приблизительно так:

Код:
 
INSERT INTO `Table` VALUES ('5751','22:50','-----text1-----', '28');
INSERT INTO `Table` VALUES ('5750','22:40','-----text2-----', '10');
 

Всего записей: 77 | Зарегистр. 19-06-2006 | Отправлено: 23:15 19-02-2008
Cheery



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

Цитата:
помогите написать регуляторку для такого куска кода  

ну вот чуть чуть напрячься..
preg_match_all  с кодом /-----(.*?)-----/

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:56 20-02-2008
andead



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

Цитата:
ну вот чуть чуть напрячься..  
preg_match_all  с кодом /-----(.*?)-----/

мне кажеться тире только для лучшего восприятия примера
 
что то типа такого

Код:
preg_match_all('/id=(\d+)\'>(.+?)\<.*logo\'\>\<\/td\>\<td\>(.+?)\<.*\<b\>(.+?)\<\/b\>/', $html, $matches);

 
на выходе

Код:
    [1] => Array
        (
            [0] => 5751
            [1] => 5750
        )
 
    [2] => Array
        (
            [0] => -----22:50-----
            [1] => -----22:40-----
        )
 
    [3] => Array
        (
            [0] => -----text1-----
            [1] => -----text2-----
        )
 
    [4] => Array
        (
            [0] => -----28-----
            [1] => -----10-----
        )

Всего записей: 1821 | Зарегистр. 22-09-2005 | Отправлено: 02:07 20-02-2008
Unsiker



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

Всего записей: 77 | Зарегистр. 19-06-2006 | Отправлено: 13:18 20-02-2008
Unsiker



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

Цитата:
  [1] => Array
        (
            [0] => 5751
            [1] => 5750
        )
 
    [2] => Array
        (
            [0] => -----22:50-----
            [1] => -----22:40-----
        )
 
    [3] => Array
        (
            [0] => -----text1-----
            [1] => -----text2-----
        )
 
    [4] => Array
        (
            [0] => -----28-----
            [1] => -----10-----
        )

Подскажите, а как мне даные вывести на екран
 
а то echo $matches недает результатов.
 

Всего записей: 77 | Зарегистр. 19-06-2006 | Отправлено: 20:59 20-02-2008
Cheery



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

Цитата:
а то echo $matches недает результатов.

www.php.net/print_r
либо перебираем массив $matches и выбираем что нужно выводить

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:34 20-02-2008
zoza



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
помогите пожалуйста...
 
есть html
 
нужно в нём все src тега script (если там нет http) заменить на http://site/$1
+
все href тега link (если там нет http) заменить на http://site/$1
+
<style(.*)@import "/files/css/file.css"   заменить на  
<style(.*)@import "http://site/files/css/file.css

Всего записей: 131 | Зарегистр. 24-01-2004 | Отправлено: 21:58 20-02-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zoza
эм.. а читается чем? в смысле - html код доступен уже в самом php?
что нить такое для js
preg_replace('#(script\s+src)=(\"|\')([^:\1]*)(?:\2)#i','$1=$2http://site/$3$2',$str);  
аналогично для css
 
preg_replace('#(import\s*)(\"|\')([^:\1]*)(?:\2)#i','$1$2http://site/$3$2',$str);  
 
вроде работает.. код навскидку

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:03 20-02-2008 | Исправлено: Cheery, 22:33 20-02-2008
Unsiker



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
print_r  выдал
Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) [3] => Array ( ) [4] => Array ( ) )
Подскажите в чем может быть ошибка?

Всего записей: 77 | Зарегистр. 19-06-2006 | Отправлено: 22:06 20-02-2008
Cheery



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

Цитата:
Подскажите в чем может быть ошибка?

строка, к которой было применено + регулярное выражение

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:16 20-02-2008
Unsiker



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

Цитата:
строка, к которой было применено + регулярное выражение

 
Это подход с далека, Вот мой код  

Код:
 
<?php
$html = " <tr><td class=wblight
align=right>&nbsp;<a
href='test.php?id=5751'>-----22:50-----</a>&nbsp;</td><td
class=wblight><table border=0 cellpadding=0
cellspacing=0><tr><td>&nbsp;</td><td><table
border=0 cellspacing=0 cellpadding=0><tr><td><img
width=24 height=24 src='i/logo.gif' border=0
title='logo'></td><td>-----text1-----</td></tr></table></td><td>&nbsp;</td></tr></table></td><td
class=wblight align=center>&nbsp;<font
color='000000'><b>-----28-----</b></font>&nbsp;</td></tr><tr>
 
 <td class=wblight align=right>&nbsp;<a
href='test.php?id=5750'>-----22:40-----</a>&nbsp;</td><td
class=wblight><table border=0 cellpadding=0
cellspacing=0><tr><td>&nbsp;</td><td><table
border=0 cellspacing=0 cellpadding=0><tr><td><img
width=24 height=24 src='i/logo.gif' border=0
title='logo'></td><td>-----text2-----</td></tr></table></td><td>&nbsp;</td></tr></table></td><td
class=wblight align=center>&nbsp;<font
color='000000'><b>-----10-----</b></font>&nbsp;</td></tr>";
 
preg_match_all('/id=(\d+)\'>(.+?)\<.*logo\'\>\<\/td\>\<td\>(.+?)\<.*\<b\>(.+?)\<\/b\>/',$html, $matches);
print_r ($matches);
 
?>  
 

 
на выходе Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) [3] => Array ( ) [4] => Array ( ) )
 
Подскажите как добиться нужного результата?

Всего записей: 77 | Зарегистр. 19-06-2006 | Отправлено: 09:51 21-02-2008
andead



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

Код:
preg_match_all('/id=(\d+)\'>(.+)\<.*logo\'\>\<\/td\>\<td\>(.+)\<.*\<b\>(.+)\<\/b\>/isU', $html, $matches);  

Всего записей: 1821 | Зарегистр. 22-09-2005 | Отправлено: 11:39 21-02-2008
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Unsiker
Странный вы какой то Если у вас в реале просто -----*----- то зачем вам усложнять ситуацию и делать довольно сложный запрос, воспользуетесь прямо тем что вам советует Cheery с другой стороны если это не так то надо более конкретизировать задачу, мы же не можем просчитать все варианты за вас, и вообще не помешает почитать вот эту доку:
Как правильно задавать вопросы

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 12:26 21-02-2008
Evgen_XXX

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

Код:
   3:1 (1:1)<br></pre><span class=cap>Футбол. Чемпионат Украины</span><pre>
Заря Лг              Металлург Зп         0:1 (0:1)<br>Закарпатье           Днепр Дп             1:1 (1:1)<br>Голы: первый - Днепр Дп на 13-й мин.
Пенальти - нет. Удаления - нет
 
Нефтяник Ахт         Карпаты              0:0 (0:0)<br></pre><span class=cap>Футбол. Чемпионат Уругвая</span><pre>
 
Уондерерс            Серру                1:0 (0:0)<br>Мирамар Мисионес     Пеньяроль            0:2 (0:0)<br></pre><span class=cap>Футбол. Чемпионат Уэльса</span><pre>
Кернарфон            

Нужно вытащить:
Футбол. Чемпионат Украины
Заря Лг
Металлург Зп  
0 //забито  
1 //пропущено
0 //1тайм
1
Вот регулярка

Код:
preg_match_all("/<span class=cap>$sport$chemp<\/span>(.*?)<span class=cap>/is", $text, $arr);
preg_match_all("/(.+?)\40{2, }(.*?)\40{2, }(\d+?):(\d+?).+?\((\d+?):(\d+?)\)<br>/is", $str, $arr2);

Никак не получается вытащить название команд

Всего записей: 12 | Зарегистр. 21-10-2006 | Отправлено: 19:13 23-03-2008 | Исправлено: Evgen_XXX, 19:17 23-03-2008
Mamay



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

Код:
preg_match_all('~\n([^\s]*\s[^\s]*)\s{2,}([^\s]*\s[^\s]*)~ism',$str,$m);

 
Добавлено:
нащёт модификатора m ненужно возмущатся - это типа параноя...
кому не нравится может убрать и без него оно работать будет
 
Добавлено:

Код:
$str = "    3:1 (1:1)<br></pre><span class=cap>Футбол. Чемпионат Украины</span><pre>
Заря Лг              Металлург Зп         0:1 (0:1)<br>Закарпатье           Днепр Дп             1:1 (1:1)<br>Голы: первый - Днепр Дп на 13-й мин.
Пенальти - нет. Удаления - нет
 
Нефтяник Ахт         Карпаты              0:0 (0:0)<br></pre><span class=cap>Футбол. Чемпионат Уругвая</span><pre>
 
Уондерерс            Серру                1:0 (0:0)<br>Мирамар Мисионес     Пеньяроль            0:2 (0:0)<br></pre><span class=cap>Футбол. Чемпионат Уэльса</span><pre>
Кернарфон            ";
 
 
preg_match_all('~\n([^\s]*\s[^\s]*)\s{2,}([^\s]*\s[^\s]*)~ism',$str,$m);
print_r($m);

результат

Код:
Array
(
    [0] => Array
        (
            [0] =>  
Заря Лг              Металлург Зп
            [1] =>  
Нефтяник Ахт         Карпаты  
            [2] =>  
Уондерерс            Серру  
            [3] =>  
Кернарфон            
        )
 
    [1] => Array
        (
            [0] => Заря Лг
            [1] => Нефтяник Ахт
            [2] => Уондерерс  
            [3] => Кернарфон  
        )
 
    [2] => Array
        (
            [0] => Металлург Зп
            [1] => Карпаты  
            [2] => Серру  
            [3] =>  
        )
 
)


----------
Даже самый дурацкий замысел можно выполнить мастерски

Всего записей: 1352 | Зарегистр. 03-09-2002 | Отправлено: 20:23 23-03-2008
Evgen_XXX

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

Код:
[1] => Array
        (
            [0] => Заря Лг
            [1] => Закарпатье                !!!
            [2] => Нефтяник Ахт
           ...................
           
        )
 
    [2] => Array
        (
            [0] => Металлург Зп
            [1] => Днепр                         !!!
            [2] => Карпаты  
           ................

 
Добавлено:
Получилось

Код:
preg_match_all("/\n*([^\s]*?\s[^\s]*?)\s{2,}([^\s]*?\s[^\s]*?)\s{2,}(\d+?):(\d+?).+?\((\d+?):(\d+?)\)<br>/is", $text, $arr2);

Подскажите как можно записать что
Код:
[^\s]*?\s
может повторяться больше одного раза

Всего записей: 12 | Зарегистр. 21-10-2006 | Отправлено: 22:03 23-03-2008 | Исправлено: Evgen_XXX, 00:17 24-03-2008
Mamay



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
+ --- один или больше раз
{2,}не менее 2х раз
{2,5} от 2х до 5ти раз
 
Добавлено:
ну и
{,5} не более 5ти раз

----------
Даже самый дурацкий замысел можно выполнить мастерски

Всего записей: 1352 | Зарегистр. 03-09-2002 | Отправлено: 12:14 24-03-2008
DeADMoHAX



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Надо было заменять слова на другие слова - по-умному, т.е. только отдельные слова.
есть такой код:

Код:
$word='Hello';
$link='Happy';
print (preg_replace("/($word)[\s[:punct:]]/",$link,'Hello! Hello, Helloworld'));

Выводит  

Цитата:
Happy Happy Helloworld

надо  

Цитата:
Happy! Happy, Helloworld

Как?
PCRE/POSIX без разницы, хотя лучше первое.

----------
dmlabs.ru || hackconnect.ru
Выгодно России – значит, хорошо. Не выгодно России – пошёл на хер.

Всего записей: 1367 | Зарегистр. 03-02-2005 | Отправлено: 21:32 15-04-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