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

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



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

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

Всего записей: 1821 | Зарегистр. 22-09-2005 | Отправлено: 21:57 15-04-2008
DeADMoHAX



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

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

Всего записей: 1367 | Зарегистр. 03-02-2005 | Отправлено: 22:56 15-04-2008
Delphi6



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

Цитата:
$word='Hello';  
$link='Happy';  
print (preg_replace("/($word)([\s[:punct:]])/",$link . '$2','Hello! Hello, Helloworld'));

Мне не совсем понятно почему ваш код работает Ведь исходной строке, после первого слова идет прямо восклицательный знак, а в регулярном выражении написано что после ключевого слова  должен идти любой символ пустой строки ... а у нас там восклицательный знак, странно как то. Ну и конечно что бы не пользоваться $2 можно первый захват всегда проигнорировать:

Цитата:
print (preg_replace("/(?:$word)([\s[:punct:]])/",$link . '$1','Hello! Hello, Helloworld'));

или совсем без него

Цитата:
print (preg_replace("/$word([\s[:punct:]])/", $link.'$1', 'Hello! Hello, Helloworld'));

И что за аббревиатура :punct:, смотрел на php.net но не нашел

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 06:25 16-04-2008 | Исправлено: Delphi6, 06:30 16-04-2008
Brodyaga



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Delphi6
Это POSIX'овый класс символов, есть ещё digit, alpha и другие.

----------
Damn Metal

Всего записей: 2713 | Зарегистр. 07-01-2006 | Отправлено: 07:13 16-04-2008
andead



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

Цитата:
И что за аббревиатура unct:, смотрел на php.net но не нашел

это наследие POSIX-a, в вики есть список этих диапазонов - http://ru.wikipedia.org/wiki/Регулярные_выражения
думаю на первый вопрос теперь сами ответите =)

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



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

Цитата:
Это POSIX'овый класс символов

Теперь понятно что значит эти аббревиатуры Спасибо за линк, начну тоже их использовать
 
Что же касается первого вопроса то теперь понятно, я просто не заметил что там не просто указано что после ключа идет "пустой" символ $word(\s...), а перечень возможных символов $word([\s...]) .

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 08:01 16-04-2008 | Исправлено: Delphi6, 08:07 16-04-2008
kpg12

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужно выдернуть значение value и ТЕКСТ
из:
<option value="1">ТЕКСТ</option>
<option value="2">ТЕКСТ</option>
<option value="3">ТЕКСТ</option>
<option value="4">ТЕКСТ</option>
<option value="5">ТЕКСТ</option>
 
(этот HTML затянут в $message с помощью CURL)
 
пробую получить хоть что-то, так:
$start = '/<option value="(\d+)">(.*?)<\/option>/';
preg_match_all($start, $message, $matches);
for ($i=0; $i< count($matches); $i++) {
echo $matches[0]."<br>";
}
 
получаю:
Array
Array
Array
 
как правильно сделать? Хотелось бы чтобы выводило:
1
ТЕКСТ
2
ТЕКСТ
....

Всего записей: 3 | Зарегистр. 02-05-2008 | Отправлено: 20:17 02-05-2008
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kpg12
Это уже вопрос синтаксиса а не регулярных выражения Надо было написать:

Цитата:
preg_match_all($start, $message, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
  echo $match[1]."<br>".$match[2]."<br>";
}

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 22:32 02-05-2008
kpg12

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
спасибо за ответ,
я извиняюсь, но если пишу так:

Цитата:
preg_match_all($starts, $message, $matches[1 или 0]);
foreach ($matches as $match) {  
  echo $match[1]."<br>".$match[2]."<br>";  
}

 
то получаю на выходе:
 
Array
Array
 
я на самом деле уже плохо понимаю что делаю

Всего записей: 3 | Зарегистр. 02-05-2008 | Отправлено: 00:07 03-05-2008
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kpg12
Исходник:

Код:
<?php
$message = '
  <option value="1">ТЕКСТ</option>
  <option value="2">ТЕКСТ</option>
  <option value="3">ТЕКСТ</option>
  <option value="4">ТЕКСТ</option>
  <option value="5">ТЕКСТ</option>
';
$starts = '/<option value="(\d+)">(.*?)<\/option>/';  
preg_match_all($starts, $message, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {  
  echo $match[1]."<br>".$match[2]."<br>";  
}
?>

Результат:

Цитата:
1
ТЕКСТ
2
ТЕКСТ
3
ТЕКСТ
4
ТЕКСТ
5
ТЕКСТ

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 00:15 03-05-2008 | Исправлено: Delphi6, 00:16 03-05-2008
kpg12

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

Всего записей: 3 | Зарегистр. 02-05-2008 | Отправлено: 00:25 03-05-2008 | Исправлено: kpg12, 00:36 03-05-2008
Evgen XXX

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите пожалуйста
 
Текст:
 
Текст
 
Нужно вырвать:
ДРЕЛИ УГЛОВЫЕ DeWalt (США) Дрель угловая DeWalt
4 201 р.
dominstrumenta.ru/product_info.php%3Fproducts_id%3D2929%26from%3Dymarket&
amp;onstock=1&amp;classifier_magic_id=9c88fa9310d987ebde43ee6c436346ad&amp;
hash=bnhiendajicpabhgddhedfbdnfdmjbilo
Дом Инструмента
 
Регулярное выражение:
 
preg_match_all("!<div\sclass=\"name\"><[^\>]*>(.*)<span\sclass=\"price\"><span>([\d]
*[\s]*[\d]{3}\s[а-я]{1,3}\.).*url=([^\"]*)\">([^\<]*)<!isU",$src, $items, PREG_SET_ORDER);
 
На локальном работает нормально. На хостинге не хочет
И еще вопрос: Как его  можно оптимизировать?

Всего записей: 12 | Зарегистр. 21-10-2006 | Отправлено: 13:17 06-05-2008 | Исправлено: Evgen XXX, 13:31 06-05-2008
andead



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

Код:
бла бла бла <a href="qwe/sdfdsf/вап">1</a> бла бла бла
бла бла бла <a href="уке/dfgdfg/апр">2</a> бла бла бла
бла бла бла <a href="апр/people/вап">3</a> бла бла бла
бла бла бла <a href="вап/fghfgh/вап">4</a> бла бла бла

 
надо найти все ссылки в которых не встречается /people/, т.е:
1, 2, 4

Всего записей: 1821 | Зарегистр. 22-09-2005 | Отправлено: 06:04 07-06-2008 | Исправлено: andead, 06:05 07-06-2008
romeoplus



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
помогите,пожалуйста,поменять ссылки <a href="news.htm"> на полный путь
<a href="http://path/news.htm">,когда $_POST['path']="http://path/".

Всего записей: 3 | Зарегистр. 03-07-2008 | Отправлено: 22:02 03-07-2008
andead



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

Код:
$replaced = preg_replace('#(.*<a href=")(.*)#isU', '$1http://path/$2', $text);

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



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
никак не получается.вот такой скрипт ничего не выводит на экран:
$text='<p><a href="abra.cadabra">';
 $rez=preg_replace('#(.*<a\s+href=")(.*)#isU','$1http://aaa/aa/$2',$text);
 echo $rez;

Всего записей: 3 | Зарегистр. 03-07-2008 | Отправлено: 11:53 04-07-2008
andead



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

Код:
$text='<p><a href="abra.cadabra">+))</a>';  
$rez=preg_replace('#(.*<a\s+href=")(.*)#isU','$1http://aaa/aa/$2',$text);  
echo $rez;

))))

Всего записей: 1821 | Зарегистр. 22-09-2005 | Отправлено: 14:46 04-07-2008 | Исправлено: andead, 14:47 04-07-2008
romeoplus



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

Всего записей: 3 | Зарегистр. 03-07-2008 | Отправлено: 15:14 04-07-2008
andead



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
romeoplus
исходный код страницы посматри

Всего записей: 1821 | Зарегистр. 22-09-2005 | Отправлено: 23:55 04-07-2008
Cheery



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

Цитата:
помогите,пожалуйста,поменять ссылки <a href="news.htm"> на полный путь

$str=str_ireplace('href="','href="'.$path,$str);


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:00 05-07-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