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

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



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Спасибо, помогло.
 
 
Ещё вопросик, подскажите пожалуйста, есть текст в переменной $text, в нём 4 абзаца. (тег <p>) Как разделить эти абзацы в разные переменные?
Буду очень признателен.

Всего записей: 525 | Зарегистр. 11-12-2004 | Отправлено: 18:57 01-03-2009
kivan



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

Код:
 
$pieces = explode("<p>", $text);
print_r($pieces);
 

Всего записей: 341 | Зарегистр. 23-11-2004 | Отправлено: 13:15 02-03-2009
eternal2000



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
в таком случае первая переменная будет пустой, и во все переменные в конце текста добавится "</p>" если такой вариант устраивает, то можно просто при выводе или вставке этих переменных просто скоращать их длину на 4 символа, т.е. образать с конца) но корректно это будет робить только при условии что закрывающий тэг всегда будет в таком виде

Всего записей: 185 | Зарегистр. 11-11-2007 | Отправлено: 16:41 02-03-2009
Cheery



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

Цитата:
в таком случае первая переменная будет пустой,


Цитата:
$pieces = preg_split("/<p>/i", $text, -1, PREG_SPLIT_DELIM_CAPTURE);  

так будет с разделителями  

Цитата:
то можно просто при выводе или вставке этих переменных просто скоращать их длину на 4 символа, т.е. образать с конца) но корректно это будет робить только при условии что закрывающий тэг всегда будет в таком виде

проще уж добавлять спереди. да и потом - нужно определиться.. нужен ли текст только между <p> и </p>
тогда
/<p>(.*?)<\/p>/i
как то вот так

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:02 02-03-2009 | Исправлено: Cheery, 21:04 02-03-2009
eternal2000



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

Цитата:
/<p>(.*?)<\/p>/i

это самый лучшый вариант, и дальше брать результаты из массива и в конце и вначале доавить тэги если нужно

Всего записей: 185 | Зарегистр. 11-11-2007 | Отправлено: 10:08 03-03-2009 | Исправлено: eternal2000, 10:13 03-03-2009
Z4masko



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите плиз решение:
Есть строка например:

Код:
 
c:\download\catalog\
 

Надо с помощью регулярного выражения оставить только слово "catalog"
Подскажите регулярноетвыражение, с помощью которого это можно сделать

----------
Ремонт АКПП Лексус (Lexus): RX 300, RX 330, RX 350, LX 470, GX 470, GS 300 ...

Всего записей: 735 | Зарегистр. 05-11-2004 | Отправлено: 14:12 04-03-2009
Cheery



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

Цитата:
Подскажите регулярноетвыражение, с помощью которого это можно сделать

зачем?
сделайте split по / и последний (или предпоследний) элемент массива

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:56 04-03-2009
eternal2000



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

Всего записей: 185 | Зарегистр. 11-11-2007 | Отправлено: 14:59 05-03-2009
ForposT_ForeveR



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый вечер.
Подскажите пожалуйста, как спарсить контент на страничке  
__edimdoma.ru/recipt_print.php?idr=1
От заголовка, до конца текста.
Заранее огромное человеческое спасибо.
 

Всего записей: 525 | Зарегистр. 11-12-2004 | Отправлено: 23:29 12-03-2009
ForposT_ForeveR



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здравствуйте.
Ребята подскажите пожалуйста регулярное выражение под РНР, для того чтобы удалить ссылки <a href>оставить этот контент </a>,но оставить то что заключено между тегами <a> и </a>
Заранее спасибо.

Всего записей: 525 | Зарегистр. 11-12-2004 | Отправлено: 23:04 18-03-2009 | Исправлено: ForposT_ForeveR, 00:24 19-03-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ForposT_ForeveR
обычный replace
$str=preg_replace('/<a[^>]+>(.*)<\/a>/',"$1",$str);
что то такое

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:08 19-03-2009
intrigued

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте, уважаемые эксперты!
 
Помогите, пожалуйста, разобраться с таким вопросом:
 
есть некий html текст, например:

Код:
<html>
<head>
<title>This is a test</title>
</head>
<body bgcolor="white">
<img src="http://www.megasite.com/mycoolsite/papka/file.jpg" width="23" height="56" alt="" />
<h1>This is a test</h1>
<p>First paragraph</p>
<p><a href="http://www.site.com/">Link</a> paragraph</p>
<!--More boring stuff omitted
 
-->
<b>bold text</b>
<img src="howdy.html" />text
<a href="#">link</a>
</body>
</html>

 
с помощью разбора (использую PHP) необходимо получить весь текст, находящийся вне тегов, т.е. (выделено красным)  

Код:
<html>
<head>
<title>This is a test</title>
</head>
<body bgcolor="white">
<img src="http://www.megasite.com/mycoolsite/papka/file.jpg" width="23" height="56" alt="" />
<h1>This is a test</h1>
<p>First paragraph</p>
<p><a href="http://www.site.com/">Link</a> paragraph</p>
<!--More boring stuff omitted
comment
-->
<b>bold text</b>
<img src="howdy.html" />text
<a href="#">link</a>
</body>
</html>

 
загнать его в переменную, произвести какие-то манипуляции над "голым текстом" и затем вернуть все теги обратно, чтобы в результате получилась переменная с преобразованным текстом.
Смог допетрить только до такого паттерна <\/?.+\/?>(.*?)<\/\w+>
но работает он как-то не так, не обрабатывает текст вложенных тегов, и, например, такой
Код:
<img src="howdy.html" />text

 
подскажите, пожалуйста.

Всего записей: 13 | Зарегистр. 29-07-2007 | Отправлено: 18:02 25-03-2009
Cheery



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

Цитата:
загнать его в переменную, произвести какие-то манипуляции над "голым текстом" и затем вернуть все теги обратно, чтобы в результате получилась переменная с преобразованным текстом.  

"вернуть обратно"? вам не регулярка нужна..  
а работа с XML или DOM.. вот пример класса
http://simplehtmldom.sourceforge.net/manual.htm

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 18:08 25-03-2009
intrigued

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery, спасибо за ответ, но думаю, предложенный вами вариант слишком громоздкий для моих нужд... Попытаю объснить для чего мне все это нужно, возможно есть менее мозголомный вариант.
 
Есть некая CMS с визуальным редактором для наполнения контента, бывают случаи, что юзер вставляет изображения в контент или просто ссылки, у меня при сабмите формы стоит проверка на регулярке:

Код:
$value = preg_replace("/([^\s]{30})[^\s]+/", "$1...", $value);

т.е., любые словесные(символьные) конструкции превышающие 30 символов обрезаются до 30 (чтобы верстка не "ехала"), определение отдельных слов идет по пробелам (\s), вот и получается, что если юзер вбил <img src="http://www.qwerty.com/dir1/dir2/dir3/dir4/file.jpg" />" такая конструкция просто коверкается, а нужно, чтобы анализировались только данные ВНЕ тегов. Может есть какие-то решения?

Всего записей: 13 | Зарегистр. 29-07-2007 | Отправлено: 18:23 25-03-2009
Cheery



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

Цитата:
Может есть какие-то решения?

так все же - вам надо
Цитата:
и затем вернуть все теги обратно

или нет? или просто вырезать теги и все?  
если вырезать, то  
www.php.net/strip_tags

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 18:33 25-03-2009 | Исправлено: Cheery, 18:42 25-03-2009
intrigued

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery, я вижу 2 варианта, но, к сожалению, не знаю правильной реализации:
1) вырезать регуляркой все теги с атрибутами (это я умею), оставшийся "голый" текст без тегов проанализировать на наличие запрещенной длины слова, если таковые есть - обрезать (это тоже не проблема), затем вернуть все теги на место к уже преобразованному тексту (это я не знаю как реализовать);
2) проанализировать весь текст вместе с тегами и т.п., НО изменить только текст все тегов (тут я вообще не знаю с какой стороны подойти).
Вот. Можно ли это как-то сделать, не прибегая к помощи предложенного вами класса?

Всего записей: 13 | Зарегистр. 29-07-2007 | Отправлено: 18:45 25-03-2009
Cheery



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

Цитата:
(это я не знаю как реализовать);  

только с использованием DOM или XML. иначе как вы на место все теги "прикрутите"?

Цитата:
Можно ли это как-то сделать, не прибегая к помощи предложенного вами класса?

не думаю

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 18:46 25-03-2009
intrigued

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

Цитата:
не думаю

жаль...
 
спасибо за помощь!
 
Добавлено:
Вот что в итоге получилось с предложенным классом:
 

Код:
<?php
 
// include PHP Simple HTML DOM Parser
require_once("simple_html_dom.php");
 
// Source
$content = "<strong>Lorem ipsum dolor</strong> sit amet,
<span style=\"color:#FF6600;\">consectetur</span> adipiscing elit. Donec id
justo. <span style=\"background-color:#C0C0C0;\">Duis eu felis</span> sed nulla
elementum gravida. <em>Phasellus semper</em>, nunc <span style=\"color:#FFFFFF;\">f<span
style=\"background-color:#008080;\">ringilla viverra</span></span> cursus, <u>augue
diam</u> tincidunt <span style=\"color:#0000FF;\">ligula</span>, <span style=\"font-family:Times
New Roman;\">condimentum vestibulum</span> eros nisi et est. Quisque eget velit. In hac habitasse
platea <span style=\"font-size:medium;\">dictumst</span>. Ut libero sapien, porta non, <span
style=\"color:#FF0000;\"><strike>ullamcorper</strike></span> at, pulvinar.\n"
;
 
// dump contents of DOM object
$html = str_get_html($content);
 
echo $html . "<br /><br />\n -------------------------- \n<br /><br />";
 
// find & modifies all HTML inner elements
foreach($html->find('text') as $e)
{
    $e->outertext = strtoupper($e);
}
 
// print result
echo $html;
 
?>

 
спасибо Cheery !

Всего записей: 13 | Зарегистр. 29-07-2007 | Отправлено: 18:53 25-03-2009
ForposT_ForeveR



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

Код:
  <service>
   <number>2</number>
   <name>domain.ru</name>
   <type>ns</type>
   <state>делегирован</state>
   <sid>SID425986</sid>
   <paidTill>01.11.2009</paidTill>
  </service>

 
В файле names.html несколько таких кусочков информации, касающихся домена.
Каждая группа информации начинается с тега "service"
Подскажите пожалуйста, как выбрать домены, оплаченные до $date(сверяем с полем paidtill)
Заранее огромное спасибо.

Всего записей: 525 | Зарегистр. 11-12-2004 | Отправлено: 01:49 30-03-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ForposT_ForeveR
http://us2.php.net/manual/ru/function.xml-parse-into-struct.php

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

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

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