Java regex, нужна помощь с escape-символами - PullRequest
1 голос
/ 18 апреля 2010

Мой HTML выглядит так:

<td class="price" valign="top"><font color= "blue">&nbsp;&nbsp;$&nbsp;      5.93&nbsp;</font></td>

Я пытался:

String result = "";
        Pattern p =  Pattern.compile("\"blue\">&nbsp;&nbsp;$&nbsp;(.*)&nbsp;</font></td>");

        Matcher m = p.matcher(text);

        if(m.find())
            result = m.group(1).trim();

Не похоже на совпадение.

Мне не хватает экранирующего символа?

Ответы [ 2 ]

2 голосов
/ 18 апреля 2010

Если не удалось выйти на уровне регулярных выражений, $ означает совпадение с концом строки. И чтобы получить сингл \, необходимый для экранирования $, его необходимо экранировать в литерале String; то есть два \ символа. Итак ...

... Pattern.compile("\"blue\">&nbsp;&nbsp;\\$&nbsp;(.*)&nbsp;</font></td>");

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

1 голос
/ 18 апреля 2010

Может быть, вам нужно сбежать $ (думаю, с двумя слешами)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...