Отцам regexp

bav46

content = '<div fsdfds>some text</div> fsdfds </div>'
как достать только some text? при условии что some text попадает под . включающим подмножество переносных символов. вообщем нужно достать все что идет до первого попадания </div>
заранее спвибо

yroslavasako

а xpath уже не канает?

Bibi

а если xml невалиден?

Fimida

Начнём полное описАние:
Regular expression

...

PooH

http://realcode.ru/regexptester/
\<div[\w\s- ]*\>(.+?)</div>

yroslavasako

а если экранированный div внутри текста будет - он его не проматчит лишний раз?

PooH

экранированный - в теге [code]?
если в виде entity, то не проматчит
если там [code] то надо в регексп запихать проверку, но пока задача так не ставилась вроде бы

yroslavasako

ну поэтому я и думаю, что xml лучше xpath матчить. Тем более, что в ту же скалу xpath встроен

PooH

не, ну ясен пень, что xml очень удобно парсить - для того его вроде и сделали
но иногда надо распарсить страницу, тут уж без регексп не обойтись

PooH

хотя, слишком уж регексп жадный до ресурсов

PooH

кстати, что мешает ТС пойти другим путем?
допустим через JS пройтись по DOM страницы и вытащить содержимое div

Helga87

но иногда надо распарсить страницу, тут уж без регексп не обойтись
HTML Tidy зря писали что ли? Конечно, html надо сначало сделать валидным xml, потом делать xpath

Helga87

слишком уж регексп жадный до ресурсов
RE2 спешит на помощь!

serega1604

говорят PIRE быстрее спешит.

Helga87

Напиши на PIRE регексп, который решал бы задачу, описанную Бодрячком. Я не верю, что без lookahead-ов у тебя это получится.

val63

<div[^>]*>.*?</div>

apl13

как достать только some text?
Я чего-то не понимаю, но хочется спросить:
чем достать-то?

PooH

чем достать-то?
regexp'ом

apl13

А как?
Регексп - это автомат, а не робот. Как он может что-то откуда-то достать? :ooo:

Maurog

Регексп - это автомат, а не робот
чаще всего regexp - это функция
а доставать она умеет таким образом (TCL):

% regexp "(\[a-c\]*.*)" "abcdefgh" a b c
1
% puts "a=$a, b=$b, c=$c"
a=abcdefgh, b=abc, c=defgh

doublemother

Диззиден в свойственной ему манере намекает тебе, что ты тупое говно и надо указать язык/инструмент, которому ты будешь скармливать данный регэксп. Ваш капитан-переводчик.
Кстати, правильно Tcl, а не TCL.

PooH

Регексп - это автомат, а не робот. Как он может что-то откуда-то достать?
Думаю, все же мы тут обсуждаем практическое применение, и под регэкспом понимаем некую функцию или процедуру, которая возвращает строку|массив|объект используя регулярные выражения

apl13

~$ regexp "(\[a-c\]*.*)" "abcdefgh" a b c
regexp: command not found
:cry:

OlegXXL

На C# достать можно вот так:
 string s = Regex.Match(source, @"<div[^>]*>(?<text>.*?)</div>").Groups["text"].Value; 
Оставить комментарий
Имя или ник:
Комментарий: