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

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



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

Код:
$srt = "[bs]Sutar[/bs], [us]ПРИВЕТ![/us], [bs]тут[/bs][is]смотрим...[/is]";
echo preg_replace('#\[(\bs|us|is)\](.*)\[/(\bs|us|is)\]#iU', '<$1>$2</$3>', $srt);

 
Хочу сделать регуляркой, преобразование текста в теге [bs]...[/bs], в <bs>...</bs>
и так с bs, us, is...
но что-то не получилось...

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 17:46 14-08-2012 | Исправлено: Sutar, 17:47 14-08-2012
DrakonHaSh



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

Код:
 
$srt = "[bs]Sutar[/bs], [us]ПРИВЕТ![/us], [bs]тут[/bs][is]смотрим...[/is]";
echo preg_replace('#\[(bs|us|is)\](.*)\[/\\1\]#iU', '<$1>$2</$1>', $srt);
 

 
а у вас ошибка здесь:

Код:
 
$srt = "[bs]Sutar[/bs], [us]ПРИВЕТ![/us], [bs]тут[/bs][is]смотрим...[/is]";
echo preg_replace('#\[(\bs|us|is)\](.*)\[/(\bs|us|is)\]#iU', '<$1>$2</$3>', $srt);  
 


Всего записей: 2078 | Зарегистр. 08-01-2008 | Отправлено: 19:59 14-08-2012
Cheery



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

Код:
$srt = "[bs]Sutar[/bs], [us]ПРИВЕТ![/us], [bs]тут[/bs][is]смотрим...[/is]";  
echo preg_replace('#\[(bs|us|is)\](.*)\[/\\1\]#iU', '<$1>$2</$1>', $srt);

 
ps: уже выше написали )

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:03 14-08-2012 | Исправлено: Cheery, 20:04 14-08-2012
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DrakonHaSh
Cheery
Спасибо большое, вроде работает. Такой скрипт будет работать без ошибок верно?))

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 22:04 14-08-2012
Cheery



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

Цитата:
Такой скрипт будет работать без ошибок верно?))

а какой смысл нам плохой код писать?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:13 14-08-2012
Eaglevil



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cheery, в случае вложенных тегов работать не будет.
Не проще ли так:
Код:
$srt = "[bs]Sutar, [us]ПРИВЕТ![/us][/bs]";  
echo preg_replace('#\[(/)?(bs|us|is)\]#i', '<$1$2>', $srt);


Всего записей: 248 | Зарегистр. 20-11-2005 | Отправлено: 03:57 15-08-2012
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
не просто спросил))
а можно проверку дописать?
чтоб нельзя было сделать так:
 
[bs]ddd[is]dd[/bs][/is] т.е. не правильно закрыть теги...
bs - b а is - i

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 12:03 15-08-2012
Spy686



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
слепил такой php
но вот в этом месте (выделино) - незнаю как правильно поступить
 

Код:
 
<?php
 
// сбор данных из таблицы
$nachalo=$_POST['nachalo'];  
$konec=$_POST['konec'];
 
$clear = file_get_contents('11.clear.txt');                         // Вытягиваем текст  
 
$text = preg_replace('/'.preg_quote($nachalo).'.*?'.preg_quote($konec).'/s', '', $clear);     // Удаляем фрагменты
 
 
$clearT = fopen('11.clear.txt', 'w');                                 // Открываем файл clear.txt
fwrite($clearT, $text);                                                   // Записываем результат в файл clear.txt
fclose($clearT);                                                            // Закрываем файл clear.txt
 
$clear = file_get_contents('11.clear.txt');                          // Вытягиваем текст clear.txt
 
echo'<textarea name="text" style="width: 1250px; height:200px;">'.($clear).'</textarea></p>Скопируй текст';
 
 
 

 
Редактировано: исправлено, все правильно

Всего записей: 193 | Зарегистр. 17-12-2010 | Отправлено: 17:37 15-08-2012 | Исправлено: Spy686, 19:47 15-08-2012
neznayka3

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
подскажите программу для тестирования рег. выражений для десктопа(win). про online вкурсе
 
upd
пока регался на codeproject, нашел еще парочку regex-coach, regexbuddy
 
upd2 regexbuddy вообще супер

Всего записей: 385 | Зарегистр. 07-06-2007 | Отправлено: 09:43 19-09-2012 | Исправлено: neznayka3, 10:44 19-09-2012
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
neznayka3
ну, например
http://www.codeproject.com/Articles/24040/RegEx-Tester-Regular-Expression-Tester
но может отличаться от регулярок для конкретного языка

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 09:52 19-09-2012
relictus

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

Код:
Продаю 1-комн. кв новый дом, 2,3,4,5,6 /6 эт нов. кир. дома , площадью 34,0 кв. м , 35,4 кв. м 37 ,0 кв. м 44,5 кв. м 2-х ком. 50,49,59кв. м по 24кв. м, 3-х ком. 85,0 кв. имеется лифт. Цена 830,0 тыс. руб тел. 41-16-94, 8-962-441-1694

Номер также может встречаться в виде "411-694", "8-962-441-16-94", "+7-962-441-16-94"
Подсказанный
Код:
//PCRE
[+]?\d?[-\s]?\d{2,4}[\s-]?\d{2,4}[\s-]?\d{0,4}[\s-]?\d{0,2}

с этим справляется, но находит и лишнее, например в:

Код:
ЦЕНТР.Мира 356, 3-комн. кв., 11/12-эт. кирпич. дома, 1996 г.п., 98,5/68,2/11,3 кв. м, лоджии из спален, стеклопакеты, паркет, декоративный камин, с/у совм., душевая кабина, кухня оборудована гарнитуром и встроенной техникой, 4 млн руб., торг. 35-15-12.без мебели дешевле,БЕЗ ТОРГА = 1200000 руб.  

выбирает "1996", "35-15-12", "1200000"

Всего записей: 3761 | Зарегистр. 19-04-2005 | Отправлено: 16:44 02-10-2012
Cheery



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

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:06 02-10-2012
neznayka3

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

Код:
((8|\+7)[-\s]?)?(\(?\d{3}\)?)?[-\s]?[-\d\s]{7,15}
работает с
Цитата:
 41-16-94, 8-962-441 -1694,"411-694", "8-962-441-16-94", "+7-962-441-16-94, 8 (962) 441-16-94,  8-962-441-1694
 
1 год убирает,  
2 никак, от номера не отличается  
3 как поставить условие, чтоб цифр 6 или 11 не знаю.

Всего записей: 385 | Зарегистр. 07-06-2007 | Отправлено: 20:39 02-10-2012 | Исправлено: neznayka3, 20:44 02-10-2012
relictus

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
neznayka3
Спасибо. Чуть изменив шаблон  

Код:
((8|7)[-]?)?(\(?\d{3}\)?)?[-]?[-\d]{7,15}

удалось достичь практически нужного мне результата (находятся все возможные комбинации номеров для моей задачи) и отсекается год:

Код:
ЦЕНТР.Мира 356, 3-комн. кв., 11/12-эт. кирпич. дома, 1996 г.п., 98,5/68,2/11,3 кв. м, лоджии из спален, стеклопакеты, паркет, декоративный камин, с/у совм., душевая кабина, кухня оборудована гарнитуром и встроенной техникой, 4 млн руб., торг. 35-15-12.без мебели дешевле,БЕЗ ТОРГА = 1200000 руб. Продаю 1-комн. кв новый дом, 411-694, 8-962-441-16-94, +7-962-441-16-94, 2,3,4,5,6 /6 эт нов. кир. дома , площадью 34,0 кв. м , 35,4 кв. м 37 ,0 кв. м 44,5 кв. м 2-х ком. 50,49,59кв. м по 24кв. м, 3-х ком. 85,0 кв. имеется лифт. Цена 830,0 тыс. руб тел. 41-16-94,8-962-441-1694

остается 7-мизначная цена  
Что нужно еще добавить, чтобы игнорировать слитно идущие цифры, как в этом случае?

Всего записей: 3761 | Зарегистр. 19-04-2005 | Отправлено: 10:05 03-10-2012
hawik



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
relictus
Думаю не стоит всегда игнорировать слитно идущие цифры. А просто после напарсивания телефонов проверять чтобы небыло четырех или пяти нулей идущих подряд.
А руб. можно убирать так:

Код:
 
((8|7)[-]?)?(\(?\d{3}\)?)?[-]?[-\d]{7,15}(?! ?руб)  
 

Всего записей: 55 | Зарегистр. 30-11-2002 | Отправлено: 10:57 03-10-2012
relictus

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
hawik
К сожалению, слово "руб" не всегда есть.  И для моей задачи можно смело игнорировать слитно идущие цифры числом больше 4х (дабы не пропустить 8-962-441-1694). Насчет нулей - а вдруг попадется такая цена, как 1200500 (ну мало ли )?
Так что вопрос все ще актуален.

Всего записей: 3761 | Зарегистр. 19-04-2005 | Отправлено: 11:22 03-10-2012
relictus

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Так что нужно добавить к "((8|7)[-]?)?(\(?\d{3}\)?)?[-]?[-\d]{7,15}", чтобы исключить из найденного последовательности цифр БЕЗ символа "-" ?




Запрещен подъем тем /Cheery/

Всего записей: 3761 | Зарегистр. 19-04-2005 | Отправлено: 10:33 04-10-2012 | Исправлено: Cheery, 10:34 04-10-2012
Cheery



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

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 10:38 04-10-2012
relictus

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

Код:
<tr><td class=f80'> Найдено объявлений: <span class=f90>1110</span></td><td class=f80 align=right>

Всего записей: 3761 | Зарегистр. 19-04-2005 | Отправлено: 10:53 09-10-2012
neznayka3

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

Код:
<span[^>]*>(.*)</span>

 
upd если там только число
Код:
<span[^>]*>(\d*)</span>

Всего записей: 385 | Зарегистр. 07-06-2007 | Отправлено: 12:16 09-10-2012 | Исправлено: neznayka3, 12:18 09-10-2012
Открыть новую тему     Написать ответ в эту тему

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