Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Regex точка внутри [ ]
 
 автор: starpom   (21.08.2010 в 16:09)   письмо автору
 
 

не могу врубиться, почему не работает точка (все символы) внутри класса символов.
Задача простая, внутри тэгов выбрать весь текст, какой бы он ни был.

<?php 

  $content 
'<p class="ad-desc"> Единственная однокомнатная квартира студио ^*%4#;:<>
                                  однокомнатная </p>'
;

    
     
preg_match_all("/(?<=\"ad-desc\">)[\.\s]*(?=<\/p>)/"$content$text);      
      
      echo 
"<pre>";
        
print_r ($text);
      echo 
"<pre>";
 
?>


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

  Ответить  
 
 автор: nikita2206   (21.08.2010 в 16:24)   письмо автору
 
   для: starpom   (21.08.2010 в 16:09)
 

<?php
// так более верно:
preg_match_all("/(?<=\"ad-desc\">).*(?=<\/p>)/s"$content$text);

//на худой конец так:
preg_match_all("/(?<=\"ad-desc\">)[.\s]*(?=<\/p>)/"$content$text);

  Ответить  
 
 автор: starpom   (21.08.2010 в 16:29)   письмо автору
 
   для: nikita2206   (21.08.2010 в 16:24)
 

второй вариант не работает как и мой (а разве точка внутри класса символов не ЛИТЕРАЛ и ее не надо экранировать?), апервый не справляеться с переносом строки

  Ответить  
 
 автор: nikita2206   (21.08.2010 в 16:50)   письмо автору
 
   для: starpom   (21.08.2010 в 16:29)
 

> апервый не справляеться с переносом строки
Пробовал? Именно то что я дал, а не свое что-то... Обрати внимание на /s.

  Ответить  
 
 автор: starpom   (21.08.2010 в 17:00)   письмо автору
 
   для: nikita2206   (21.08.2010 в 16:50)
 

да , не заметил, попробовал, почти оно , но в таком варианте на тэге </p> скрипт не останавливаеться, а выберает мне еще лишний контент, как его остановить на первом попавшемся тэге абзаца?
И интересно , а почему слеш обычный (НЕ ОБРАТНЫЙ), с обратным кстати не работает, а с этим аж бегом?

  Ответить  
 
 автор: nikita2206   (21.08.2010 в 17:08)   письмо автору
 
   для: starpom   (21.08.2010 в 17:00)
 

Зачем обратный слеш?
<?php
preg_match_all
("/(?<=\"ad-desc\">).*(?=<\/p>)/s"$content$text);
/* Первый слеш - обозначает начало регулярки, последний - конец,
после последнего слеша идут модификаторы регулярки

http://yandex.ru/yandsearch?text=preg+modifiers
*/


Почитай про эти модификаторы. Модификатор s - точка включает в себя так-же и переносы.

Что-бы не идти дальше первого </p> используй ленивые регулярки.
<?php
preg_match_all
("/(?<=\"ad-desc\">).*?<\/p>/s"$content$text);

  Ответить  
 
 автор: starpom   (21.08.2010 в 17:15)   письмо автору
 
   для: nikita2206   (21.08.2010 в 17:08)
 

работает, спасибо.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования