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

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



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

Цитата:
но когда я хочу вырезать не только ссылку, он нечего не находит

повторяю в последний раз - не видя текста, к которому применяется регулярка, я вам ничего не скажу.  
 

Цитата:
Экранировать точно не нужно

я не знаю, что вы имеете в виду под "экранированием".
 

Цитата:
пример 5 вызовов preg_match_all

можно

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:59 01-02-2014
ALeXkRU



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
maxus5578
 
Cheery тонко намекает (5 раз!!), что нужно привести адрес той самой "просто страницы", т.е. хотя бы конкретный текст "обычного html", из которого рег.выражение должно вырезать информацию..
Без этой информации трудно судить, в чём может быть ошибка и почему не работает..

Всего записей: 11891 | Зарегистр. 03-12-2003 | Отправлено: 05:27 01-02-2014 | Исправлено: ALeXkRU, 05:30 01-02-2014
maxus5578

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

Всего записей: 118 | Зарегистр. 12-09-2013 | Отправлено: 13:44 01-02-2014 | Исправлено: maxus5578, 00:51 02-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
maxus5578
все лишние куски нужно убрать, так как любой лишний пробел или перенос строки сразу приведет к тому, что регулярка перестанет работать.
к примеру - в регулярке указано  
<img src="http://s.site.ru/t/arrowup.gif" alt="S" />&nbsp;
а в тексте
<img src="http://s.site.ru/t/arrowup.gif" alt="S">&nbsp;
 
например так

Код:
preg_match_all('#<a href="(magnet:.*)">.*<a href="/file/(.[0-9]*)/(.*)">(.*)</a>(.*)<td align="right">([0-9]*..?[0-9]+.?)&nbsp;(.[A-Z]*)</td>'.
               '<td align="center"><span class="green"><img src="http://s.site.ru/t/arrowup.gif"[^>]*>&nbsp;(.[0-9]*)</span>.*'.
               '<span class="red">&nbsp;(.[0-9]*)</span>#Uis', $result, $find);  


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:52 01-02-2014
maxus5578

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
не работает =(
var_dump показал пустые массивы

Всего записей: 118 | Зарегистр. 12-09-2013 | Отправлено: 17:43 02-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
maxus5578
значит привели не тот кусок текста - с ним у меня работает

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:46 03-02-2014
maxus5578

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
спасибо за помощь. Сколько не смотрел уроков не как не пойму что значат вот эти рег.выражения?
'. ' почему тут без скобок?
[^>]* почему вы заменили это вместо alt?
.*'.' почему тут без скобок?

Всего записей: 118 | Зарегистр. 12-09-2013 | Отправлено: 03:24 03-02-2014
Cheery



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

Цитата:
'. ' почему тут без скобок?  

каких скобок? круглых? если вы не собираетесь как то выделять этот кусок или использовать еще раз, то скобки не нужны
 

Цитата:
[^>]*

чтобы не писать много всего ненужного. это выберет все до > и не важно что там будет написано.
 

Цитата:
.*'.' почему тут без скобок?

читайте выше.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:27 03-02-2014
xerpal



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что-то никак не могу победить жадность, подскажите, где лажаю?  
Ест строка вида  
$ss="Имя поля1: значение поля1;Имя поля2: значение поля2;Имя поля3: значение поля3;Имя поля4: значение поля4;" и так далее.  
Через ereg пытаюсь выцепить "значение поля2".  
Пишу $res=ereg("(Имя поля2: (.*);)",$ss, $matches);
В matches в итоге
Array
(
    [0] => Имя поля2: значение поля2;  Имя поля3: значение поля3 ;  Имя поля4: значение поля4;
    [1] => Имя поля2: значение поля2;  Имя поля3: значение поля3 ;  Имя поля4: значение поля4;
    [2] => значение поля2;  Имя поля3: значение поля3;  Имя поля4: значение поля4
)
Как получить отдельное значение поля2? Ниче не помогает. Вопросительный знак после (.*)
 
PS Блин, стоило заменить ereg  на preg_match - как все заработало ((

Всего записей: 1633 | Зарегистр. 08-10-2011 | Отправлено: 10:26 19-02-2014 | Исправлено: xerpal, 10:29 19-02-2014
Cheery



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

Цитата:
This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 10:30 19-02-2014 | Исправлено: Cheery, 10:31 19-02-2014
xerpal



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Я просто почему то был уверен, что у них разный язык регулярки - а у preg сложнее. Оказалось, что они как-то совместимы

Всего записей: 1633 | Зарегистр. 08-10-2011 | Отправлено: 11:16 19-02-2014
usertum



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброй ночи.
 
Помогите пожалуйста с регуляркой для получения информации из http://nb-plus.ru/index.php?route=product/search&filter_name=hp
 
В табличку вида:
 
ТИП                          Модель (активная ссылка на подроб стр)                         наличие   цена
 
Клавиатуры  &#8594;    HP Mini 1000 (Черная)                                          В наличии    1060 р.
Клавиатуры &#8594;      HP Compaq CQ60  (Черная)                                      В наличии 3000 р.
 
Спасибо )

Всего записей: 471 | Зарегистр. 01-07-2008 | Отправлено: 23:54 16-03-2014 | Исправлено: usertum, 23:58 16-03-2014
Cheery



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

Код:
preg_match_all('/<div class="name">\s+<strong>(?<type>[^<>]+)<.*<a[^>]+>(?<name>[^<>]+)<.*<div class="alice"><[^<>]+>(?<available>[^<>]+)<.*<div class="price-box">(?<price>[^<>]+)</Uuis', $data, $matches);
 

 
результат (массив дублируется, так как именная выборка)
Подробнее...

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:15 17-03-2014 | Исправлено: Cheery, 00:16 17-03-2014
usertum



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйста как захватить URL на описание тоже в массив? что то вида <URL>.

Всего записей: 471 | Зарегистр. 01-07-2008 | Отправлено: 09:11 17-03-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
usertum
ну так говорите сразу, что вам нужно.
 
<strong>(?<type>[^<>]+)<.*<a href="(?<url>[^"]+)">(?<name>[^<>]+)
не проверял

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 09:14 17-03-2014
usertum



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый вечер, пишу вывод навигации.
 
Подскажите пожалуйста регулярное выражения, для получения под директорий.
 
Данные вида http://site.ru/dir/dir2/index.html
 
В переменные нужно получить dir, dir2 итд (все директории в URL в разные переменные)

Всего записей: 471 | Зарегистр. 01-07-2008 | Отправлено: 19:20 08-06-2014
Vitus_Bering



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

Код:
 
    $s = 'http://site.ru/dir/dir2/index.html';
 
    if ( preg_match("'^((http://.+?dir/)dir2/)index\.html$'", $s, $match_arr) ) {
 
      $dir = $match_arr[2];    // будет http://site.ru/dir/
      $dir2 = $match_arr[1];  // будет http://site.ru/dir/dir2/
 
      echo "$dir $dir2";
    }
 

Всего записей: 936 | Зарегистр. 30-09-2005 | Отправлено: 20:22 08-06-2014 | Исправлено: Vitus_Bering, 20:24 08-06-2014
usertum



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо.
Вот только имена директорий меняются... возможно сделать регулярку "универсальной", без привязки к имени...

Всего записей: 471 | Зарегистр. 01-07-2008 | Отправлено: 15:46 12-06-2014
Vitus_Bering



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

Код:
 
if ( preg_match("'^((http://.+?/).+?/)index\.html$'", $s, $match_arr) ) {
 

Всего записей: 936 | Зарегистр. 30-09-2005 | Отправлено: 16:01 15-06-2014
usertum



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо. Вот только корректный вывод сделать не получилось он выводит или http://site.ru/dir/dir2/index.html или http://site.ru/
 
<?php
  $s = 'http://site.ru/dir/dir2/index.html';
 
    if ( preg_match("'^((http://.+?/).+?/)index\.html$'", $s, $match_arr) ) {
 
      $dir = $match_arr[0];    // будет http://site.ru/dir/
      $dir1 = $match_arr[1];  // будет http://site.ru/dir/dir2/
      $dir2 = $match_arr[2];  // будет http://site.ru/dir/dir2/
      $dir2 = $match_arr[3];  // будет http://site.ru/dir/dir2/
 
 
      echo "$dir";
      echo "<br>$dir1";
      echo "<br>$dir2";
      echo "<br>$dir3";
    }
?>
 
http://site.ru/dir в выдаче нет..

Всего записей: 471 | Зарегистр. 01-07-2008 | Отправлено: 15:52 22-06-2014 | Исправлено: usertum, 15:52 22-06-2014
Открыть новую тему     Написать ответ в эту тему

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