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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sTa1kEr
Молодец, спасибо, у тебя всегда простое но оригинальное решение

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 14:07 23-11-2006
alex_gall

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
кстати, никто не подскажет как на регулярных выражениях вытащить из этой строки  
/gallery/p17_sectionid/1/p17_imageid/1  
 
мне нужно вытащить только "gallery"... точнее последнее слово перед первым входом /p№_  
 
Кто подскажет?

Всего записей: 142 | Зарегистр. 17-03-2006 | Отправлено: 22:19 29-11-2006
edogs

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alex_gall
~/(.*?)/p\d+?~

Всего записей: 1777 | Зарегистр. 25-07-2004 | Отправлено: 02:47 30-11-2006
alex00

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

Код:
<tr>test<td id=2>test</tr>

из

Код:
<tr>test<td id=1>test</tr><tr>test<td id=2>test</tr>

Такая регулярка

Код:
<tr>.*?<td id=2>.*?</tr>

находит всю строку. Пробовал делать с ассершином так

Код:
<tr>((?!</tr>).)*?<td id=2>.*?</tr>

Это работает, но для строк небольшой длинны. На больших строках ПХП 4.4 сдыхает молча, на других движках правда не пробовал.

Всего записей: 367 | Зарегистр. 31-08-2002 | Отправлено: 09:20 01-12-2006
sTa1kEr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alex00
А почему закрывающего тега </td> нету?
 
Попробуй такое выражение:

Код:
 
|<[^>]+>.*test.*</[^>]+>|iU
 

 
Добавлено:
Это для PHP

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 11:47 01-12-2006 | Исправлено: sTa1kEr, 11:48 01-12-2006
alex00

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sTa1kEr, ну я тот пример из головы взял и <td id=2> просто левый текст. Хотя если это не XHTML, то вроде закрывающую </td> ставить не обязательно
Твоя регулярка мне в первую очередь найдет найдет первую пару <tr> ... </tr>, вот эту <tr>test<td id=1>test</tr>
А мне надо грубо говоря надо найти только вторую пару <tr> ... </tr> по признаку нахождения <td id=2> внутри. Ну или по признаку id=2 - это не важно. Можно конечно сделать с твоим регэкспом preg_match_all и пройтись по каждому матчу отдельно с допольнительной проверкой, но хочется "одним махом семерых побивахом" )
 
Еще другими словами что мне надо - как заставить какую-то часть регулярки срабатывать не на первом подходящем совпадении (самое левом), но находить последнее совпадение (самое правое).
Либо как вариант нужна регулярка ищущая любую последовательность символов, но такую что не включает в себя последовательность "xxx". Тут вроде (.(?!xxx))*? подходит, но я уже говорил - с такой регуляркой ПХП на больших строках просто сдыхает без сообщений об ошибке. Может надо здесь сделать отсечения бэктрекига или что-то типа того - я в этом не разбираюсь, потому и спрашиваю
 
Добавлено:
Ура! Ура! Ура! Таки угадал - надо было делать отсечение бэктрекинга
Такая регулярка заработала и на больших строках, где раньше ПХП валилось
Код:
@<tr>(?>.(?!</tr>))*?<td id=2>.*?</tr>@i

Всего записей: 367 | Зарегистр. 31-08-2002 | Отправлено: 17:04 01-12-2006
gateway



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А мне хотелось бы изменить все относительные ссылки на абсолютные (или просто добавить "http://www."  
Типа: articles/article1.html -> /common/myarticles/articles/article1.html  
 
как можно  сделать ,please  
 

Всего записей: 73 | Зарегистр. 28-11-2005 | Отправлено: 13:59 06-12-2006
edogs

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужно выдернуть со страницы все ссылки НЕ начинающиеся с http://
Формат строгий
<a href="httр://site.ru">text</a>
или
<a href="hyp.html">text</a>
Как?

----------
...

Всего записей: 1777 | Зарегистр. 25-07-2004 | Отправлено: 05:46 26-12-2006
Say26



Скажи двадцать шесть
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
edogs
Помоему проще всего найти вообще все ссылки, а потом из массива поудалять те, которые начинаются с http://

Всего записей: 3576 | Зарегистр. 25-12-2003 | Отправлено: 16:18 27-12-2006
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
edogs
с отрицаниями в регулярках есть свои неудобства. с отрицанием слов, а не символов.. возможно удобнее сделать как сказал Say26, ну или так..

Код:
/<a[\s]+[^>]*?href[\s]?=[\s\"'`]*([^h][^t][^t][^p][^:]*?)[\"'`]*>/i

[^h].. и так далее можно заменить на (?<!http:\/\/) но тогда после этой скобки нельзя использовать точку, так как тогда смысл скобки сходится на нет.. в этом и есть свои неудобства

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

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



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

Код:
 /<a[\s]+[^>]*?href[\s]?=[\s\"'`]*([^:]*?\..+?)[\"'`]*>/i

а можно так, наверное...
 
этот регэксп покажет все ссылки кроме http://... ftp://... mms:// (т.е. все ссылки без указания протокола)
 
Вроде не накосячил

Всего записей: 51 | Зарегистр. 31-01-2005 | Отправлено: 09:06 28-12-2006
Cheery



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

Цитата:
Вроде не накосячил  

точка \. там ни к чему.. ссылка может быть и на директорию без точки в ее названии.
да и по сути, часть ниже тоже не нужна.

Цитата:
\..+?



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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:25 29-12-2006
DenDruiD



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хм. Ну нам же надо получить сам текст ссылки на выходе.
 
Тогда, может, так?

Код:
[\s\"'`]*([^:]*?(?:\\|\/).+?|[^:]*?\..+?)[\"'`]*

Всего записей: 51 | Зарегистр. 31-01-2005 | Отправлено: 10:15 29-12-2006
volodyalipkin



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имеется набор строк, часть из них имеет внутри себя выражения в скобках. Надо написать reqexp, который заменит строки без скобок на пустые, а со скобками на строки в скобках.

Код:
 
abcd  -> пустая строка
qwe (123) -> 123
 

Всего записей: 771 | Зарегистр. 12-10-2002 | Отправлено: 22:08 03-01-2007
Cheery



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

Цитата:
Имеется набор строк, часть из них имеет внутри себя выражения в скобках. Надо написать reqexp, который заменит строки без скобок на пустые, а со скобками на строки в скобках.  

preg_replace_all('/.*(\(.*\)).*/U','($1)',$str);
 
ps: не проверял

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:10 03-01-2007
quasar



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как при поиске вырвать из текста кусок фразы с искомым словом?
 
Ну типа как текст после ссылок на Яндексе

Всего записей: 398 | Зарегистр. 29-01-2002 | Отправлено: 16:11 16-01-2007 | Исправлено: quasar, 16:13 16-01-2007
DenDruiD



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

Всего записей: 51 | Зарегистр. 31-01-2005 | Отправлено: 16:44 16-01-2007
quasar



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну я вот сам не знаю, как это определить лучше..
 
какие варианты бывают?
 
просто по 50 символов слева-справа? или там, по 20 слов?

Всего записей: 398 | Зарегистр. 29-01-2002 | Отправлено: 18:21 16-01-2007
edogs

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

Цитата:
просто по 50 символов слева-справа?  

кажется так
(.{50}фраза.{50})


----------
...

Всего записей: 1777 | Зарегистр. 25-07-2004 | Отправлено: 18:56 16-01-2007
vergiliy2

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вы не подскажете как с помощию регулярных вырожений убрать из:
<LI value=2>
 <DIV class=title>Нужный текст</DIV>
 <DIV class=text>Тоже нужный текст</DIV>
 <DIV class=info><SPAN style="COLOR: #060">Нужный текст</SPAN></DIV>
 <DIV class=info><NOBR>Ненужный текст</NOBR></DIV>
<LI value=3>
 <DIV class=title>Нужный текст</DIV>...(и так далее)

текст <DIV class=info><NOBR>Ненужный текст</NOBR></DIV>?
т.е. в итоге должно получиться:
<LI value=2>
 <DIV class=title>Нужный текст</DIV>
 <DIV class=text>Тоже нужный текст</DIV>
 <DIV class=info><SPAN style="COLOR: #060">Нужный текст</SPAN></DIV>
<LI value=3>
 <DIV class=title>Нужный текст</DIV>...(и так далее)

P.S. Тексты визде произвольные

Всего записей: 1 | Зарегистр. 20-01-2007 | Отправлено: 15:53 20-01-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