LINUX.ORG.RU

Java regexp

 ,


0

1

Какой паттерн используется, чтобы пропускать всё до определённого символа?

Например у меня есть: sd5f55 \n %^&?> ...

мне нужно пропустить все до >

".*>" - не прокатывает :(

★★★

А пример-то многострочный, \n в наличии, вот точка и не срабатывает. Тут или глобальный флаг DOTALL включать http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#DOTALL , или прямо в паттерне записать (?s)

String s = «sd5f55\n %^&?> ...»;

System.out.println(s.matches("(?s).*>.*")); System.out.println(s.matches(".*>.*"));

anonymous
()
Ответ на: комментарий от anonymous

Теперь оно пропускает всё, включительно следующий > и летит до не понятного какого «>» по счёту.

        <td>Ололоев тег</td>
	<td style="color:#000000;">
	МеняНужноВытянутьОтседава
	</td>

Паттерн: «<td>Ололоев тег</td>.*>(.*)</td>» - DOTALL включил в compile флаги.

Результат: находит « » в «<td id=„bg_right“> </td>»

В чем причина?

vova7890 ★★★
() автор топика
Ответ на: комментарий от vova7890

p.s. Я знаю, что это можно сделать гораздо проще, но я хочу разобраться, т.к. с регулярками у меня не очень.

vova7890 ★★★
() автор топика

Сделал вот так:

<td>Ололоев тег</td>[\\s]*.*>\\s*(.*)\\s

vova7890 ★★★
() автор топика
Ответ на: комментарий от Kalashnikov

Даже для XML-я простой и конкретный случай лучше разобрать регуляркой, а не запускать фабрики SAX или включать более человеческий XPath.

А если это HTML, то для его разбора придется тащить новую библиотеку и наслаждаться утолщением проекта. Viva la вредные советы!

anonymous
()
Ответ на: комментарий от anonymous

Не надо никаких библиотек, доктайп только правильный нужно поставить.

Твой вариант один фиг сломается, всё равно придётся переписывать с пар сером.

Kalashnikov ★★★
()
Ответ на: комментарий от Kalashnikov

ML

Мопед не мой :) а топикастера.

А насчет доктайпа ссылкой не поделишься? Что в Python и PHP с этим все в порядке, то понятно. А Java ведь больше на XML (и XHTML) равняется?

anonymous
()
Ответ на: ML от anonymous

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

Kalashnikov ★★★
()

Если мне надо до символа x я пишу ([^x]*)x

Absurd ★★★
()
Ответ на: комментарий от Kalashnikov

Так и есть. Правильно говоришь. Но, думаю, все через это проходили.

kovrik ★★★★★
()

String.indexOf() Если все же регуляркой то выключи жадность заменив * на *?.

urxvt ★★★★★
()
Последнее исправление: urxvt (всего исправлений: 1)

«>...», если > нужен, или "(?<=>)...", если нет. если речь о хтмл, то «>([^<]*)» или "(?<=>)[^<]*". или в жабе не pcre?

arsi ★★★★★
()
Ответ на: комментарий от anonymous

, а не запускать фабрики SAX

вот понапишут всё на DOM, а потом плачут, что «java тормозит» :-)

stevejobs ★★★★☆
()

ТС, включи многострочные регулярки, а потом гугли по «java Greedy Reluctant possessive»

вот две первые строчки из гугла: http://stackoverflow.com/questions/5319840/greedy-vs-reluctant-vs-possessive-...
http://stackoverflow.com/questions/1139171/when-it-comes-to-regex-what-is-the...

Особенно интересна там конструкции

(?=X)	X, via zero-width positive lookahead
(?!X)	X, via zero-width negative lookahead
(?<=X)	X, via zero-width positive lookbehind
(?<!X)	X, via zero-width negative lookbehind

(подробней в http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html)

stevejobs ★★★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.