Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Регулярные выражения


Автор: kukich 15.2.2010, 15:45
С помощью LWP достаю страничку , надо выделить 
Код

<title>то что надо выделить </title>.

Вот этим рег. выражением я выделяю эту строку 
Код

$str=~m/(<title>)(.+)(?=<\/title>)/;

Где в $str забит код страницы и при этом все работает.
Но в случае если на странице титл размещён таким образом
Код

<title>
    
        Здесь то , что надо выделить
    
</title>

то ничего не выделяется.Почему это?


Автор: Logo 15.2.2010, 16:20
Модификатор s

Автор: kukich 15.2.2010, 16:33
Елси я не ошибаюсь , то модификатор S используется для замены , а M - для поиска.Мне не нужно заменять

Автор: amg 15.2.2010, 16:43
Цитата(kukich @  15.2.2010,  16:33 Найти цитируемый пост)
С модификатором S даж не компилиться
Не S, а s.
Код
if ($str=~/<title>(.+?)<\/title>/s) {
  # В $1 будет нужное
}

Автор: kukich 15.2.2010, 16:58
виноват , все работает

Автор: okanatov 15.2.2010, 19:07
Немного запоздал с ответом, но всё же мои 5 копеекsmile

Первый вариант (без модификатора s) не работает, так как в этом случае метасимвол '.' не будет матчить '\n'.

Автор: krypt3r 16.2.2010, 11:21
Код

$str =~ /(?<=<title>)\s*(.+?)\s*(?=<\/title>)/s;

Автор: mvsgt 16.2.2010, 13:18
Для фрагмента ниже все вышеперечисленные выражения не дадут результата.
Код

<html>
<head>
<title>title title title title 
</head>
<body>
body body body body body body 
</body>
</html>


а этот вариант даст:
Код

$html =~ /(<title\s*>)\s*([^<]+?)\s*(<\/)/s;


вопрос - на что лучше не обращать внимание, на использование дополнительных тэгов в title, или на отсутствие </title> ?

Автор: JackYF 16.2.2010, 13:25
Возможно, лучше не парсить html регулярками, а воспользоваться готовыми модулями для этого?

Автор: mvsgt 16.2.2010, 13:42
Цитата(JackYF @  16.2.2010,  13:25 Найти цитируемый пост)
Возможно, лучше не парсить html регулярками, а воспользоваться готовыми модулями для этого? 


Как показывает практика, некоторые редиски делают непарсабельный html, так что приходится регулярками. И скорость часто настолько выше, что вопросов даже не возникает.

Автор: KSURi 16.2.2010, 16:03
Цитата(mvsgt @  16.2.2010,  13:42 Найти цитируемый пост)
Как показывает практика, некоторые редиски делают непарсабельный html, так что приходится регулярками

Marpa::UrHTML

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)