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

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery,
Нужно именно исключить последовательность "<i>", а символ "<" попадаться может. В этом и трудность.Свой вариант регулярки написал в коде:  
"/<div>(?(?!.*?<i>.*?)(.*?))<\/div><b>(.*?)<\/b>/ui"

Всего записей: 6 | Зарегистр. 22-02-2013 | Отправлено: 09:37 25-02-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
yakoval
исключить <i> после или внутри <div>?
 

Код:
/<div>(??!<i>).)*?<\/div><b>(.*?)<\/b>/ui


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 09:40 25-02-2013 | Исправлено: Cheery, 09:56 25-02-2013
yakoval

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Внутри. Оно и исключается, но отбрасываюсятся результаты, которые находятся на одной строке с тегом <i> и до него. Т.е. не выкраивается в случае вида
<div>block text 1</div><b>link</b><div>block text 2</div><i>italic</i>

Всего записей: 6 | Зарегистр. 22-02-2013 | Отправлено: 09:52 25-02-2013 | Исправлено: yakoval, 09:54 25-02-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
yakoval
держите
/<div>(?:(?!<i>).)*?<\/div><b>(.*?)<\/b>/ui

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 09:56 25-02-2013 | Исправлено: Cheery, 09:57 25-02-2013
yakoval

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery,
Спасибо! Но ваш вариант не запоминает содержимое div-ов, даже если убрать "?:" . А это нужно.

Всего записей: 6 | Зарегистр. 22-02-2013 | Отправлено: 10:28 25-02-2013 | Исправлено: yakoval, 10:34 25-02-2013
Cheery



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

Цитата:
А это нужно

ну добавьте еще скобки - это можно было сделать и самостоятельно )
/<div>((?:(?!<i>).)*?)<\/div><b>(.*?)<\/b>/ui

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 10:35 25-02-2013
yakoval

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

Всего записей: 6 | Зарегистр. 22-02-2013 | Отправлено: 13:16 25-02-2013
DrakonHaSh



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а можно регуляркой выбрать все строки текста, *кроме* строк с условием. например все строки, кроме тех, в которых есть (xxx1|xxx2) ?
 
т.е. выбрать из строк  
xxx xxx1
xxx xxx2
xxx xxx3
xxx xxx4
 
только строки  
xxx xxx3
xxx xxx4
 

Всего записей: 2076 | Зарегистр. 08-01-2008 | Отправлено: 20:40 27-02-2013 | Исправлено: DrakonHaSh, 20:41 27-02-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DrakonHaSh
используйте модификатор m и тогда ^ будет начало строки, а $ - конец
а для остального - выше же пример есть

Код:
$str = 'xxx xxx1  
xxx xxx2  
xxx xxx3  
xxx xxx4';
 
preg_match_all('#^(?:(?!(xxx1|xxx2)).)*$#mU', $str, $f);
var_dump($f);


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:59 27-02-2013 | Исправлено: Cheery, 20:59 27-02-2013
DrakonHaSh



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
спасибо. выше, сорри, не смотрел - как-то в голову не приходила мысль что ответ на мой вопрос частично уже обсуждается в последних сообщениях.
 
а можно поподробнее о логике этой регулярки ? что эта за фича такая (?:(?!PATERN).)* ?

Всего записей: 2076 | Зарегистр. 08-01-2008 | Отправлено: 23:05 27-02-2013 | Исправлено: DrakonHaSh, 23:05 27-02-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DrakonHaSh
http://www.php.net/manual/ru/regexp.reference.assertions.php
http://www.php.net/manual/ru/regexp.reference.subpatterns.php

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:20 27-02-2013
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Почему мне при вводе русских символов всегда возвращается false?
 

Код:
$text = "Привет друг 971";
if(preg_match("#^[А-я0-9]{2,32}$#", $text) {echo "true";} else {echo "false";}

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



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

Цитата:
^[А-я0-9]{2,32}$

а пробел где? к тому же не факт, что сработает A-я, иначе бы не писали А-Яа-я

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:30 04-03-2013
Sutar



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

Код:
"#^[А-Я а-я 0-9 ї і ё Ё]{2,32}$#"

ничего не пропустил?
чтоб все русские и украинские символы проверяло...

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



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

Цитата:
ничего не пропустил?  

пробел идет как \s
далее - уникод? тогда и надо говорить модификатором u, что это уникод

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:16 04-03-2013
Sutar



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

Код:
"#^[А-Я\sа-я\s0-9\sі\sё\sЁ]{2,32}$#u"

 
??

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 00:49 05-03-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar
1) [] означает набор символов, поэтому повторения \s не нужно
2) а попробовать?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:53 05-03-2013
Sutar



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

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 01:31 05-03-2013 | Исправлено: Sutar, 01:33 05-03-2013
Cheery



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

Цитата:
тогда где ставить \s?

где угодно, но одну.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:33 05-03-2013
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Можете сказать каких символов с Русского и Украинского алфавита, в периоде php А-я нету?

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 01:35 05-03-2013
Открыть новую тему     Написать ответ в эту тему

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