PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: регулярные выражения
ai4051136
Отправлено: 27 Сентября, 2012 - 10:22:29
Post Id


Новичок


Покинул форум
Сообщений всего: 45
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




Добрый день!
Подскажите, где моя ошибка и в чем?
Изучаю регулярные выражения и не могу понять почему не хочет работать изложенный ниже пример.
Есть у меня, например, файл (test.txt) такого вида:
CODE (html):
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3. <title>интернет-магазин</title>
  4. </head>
  5. <body>
  6. <div class="page">
  7.   <div class="pu_i cutting">
  8.     <div class="ttl">Какой город ваш?</div>
  9.       <div class="cut">
  10.         <div class="choose">Выбор городов по алфавиту:</div>
  11.         <div class="for_cities">
  12.         <div class="cities">
  13.            <ul class="fst">
  14.                 <li class="let"><a href="http://almetyevsk.mysite.ru/" class="click_chose_region">Альметьевск</a></li>
  15.                 <li><a href="http://anapa.mysite.ru/" class="click_chose_region">Анапа</a></li>
  16.                 <li><a href="http://astrakhan.mysite.ru/" class="click_chose_region">Астрахань</a></li>
  17.            </ul>
  18.         <div class="uncutit"><a href="#">Все города</a> <span>&nbsp;</span></div>
  19.         <div class="cutit"><a href="#">Свернуть</a> <span>&nbsp;</span></div>
  20.         </div>
  21.       </div>
  22.     </div>
  23.   </div>
  24. </div>
  25. </body>
  26. </html>

Я хочу с помощью регулярных выражений, например, вытащить весь кусок кода между словами "Альметьевск" и "Астрахань". Пример, я конечно упростил и утрировал, но суть одна и та же.
Пытаюсь сделать так:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $filename = "test.txt";
  3. $tmp_file = fopen($filename, "r");
  4. $content = fread($tmp_file, filesize($filename));
  5. fclose($tmp_file);
  6. preg_match("/(?<=Альметьевск).*(?=Астрахань)/", $content, $href);
  7. file_put_contents("href.txt", $href);
  8. print_r($href);
  9. ?>

Результат - пустой массив. Почему?

(Отредактировано автором: 27 Сентября, 2012 - 10:23:26)

 
 Top
Alho
Отправлено: 27 Сентября, 2012 - 10:52:17
Post Id



Посетитель


Покинул форум
Сообщений всего: 322
Дата рег-ции: Апр. 2012  


Помог: 11 раз(а)




В данном случае explode будет работать быстрее.

Для того, что бы работала точка нужно её включить ключом s:
PHP:
скопировать код в буфер обмена
  1. preg_match("/(?<=Альметьевск).*(?=Астрахань)/s", $content, $href);


Лично я чаще для "любого символа" использую [\w\W], но это банальная привычка.
 
 Top
ai4051136
Отправлено: 27 Сентября, 2012 - 11:41:14
Post Id


Новичок


Покинул форум
Сообщений всего: 45
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




Alho пишет:
Для того, что бы работала точка нужно её включить ключом s:

Спасибо, заработало!

Alho пишет:
В данном случае explode будет работать быстрее.

А как с помощью explode вы решите эту задачу? Не придется ли два раза использовать explode, чтобы сначала отделить один кусок кода, а потом второй, т.к. разделители разные?
(Добавление)
Alho пишет:
Для того, что бы работала точка нужно её включить ключом s:

Как я уже сказал пример заработал, но если брать вместо урезанного примера большой исходный файл, в котором порядка 4000 строк, код опять не работает.
Почему так может происходить?
 
 Top
Alho
Отправлено: 27 Сентября, 2012 - 12:03:06
Post Id



Посетитель


Покинул форум
Сообщений всего: 322
Дата рег-ции: Апр. 2012  


Помог: 11 раз(а)




Да, дважды. Но тестили и пришли к выводу, что все-равно быстрее. В пхп на редкость медленные регулярки.

Конкретный пример - в студию - разберемся.

А вообще, для правильного написания реглярок хорошо подходят текстовые редакторы с функцией поиска по регулярным выражениям - сразу очевидны недоделки.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB