2010-04-17 3 views
1

Мой HTML выглядит следующим образом:Java регулярное выражение, нужна помощь экранирующих символов

<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(); 

не будет соответствия.

Я пропустил символ побега?

+3

Избегайте разбора HTML с регулярными выражениями, если это возможно. Вместо этого используйте парсер HTML. –

+0

Нет анализа html с использованием регулярного выражения, пожалуйста .. http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

ответ

2

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

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

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

+0

Я пробовал использовать HtmlParser, но получил застрял, поэтому я иду по регулярному маршруту! – Blankman

+0

@Blankman - Думаю, вам стоит вернуться к HtmlParser. Или если проблема в том, что у вас есть неверный HTML-код, переключитесь на нестрогий парсер, такой как HtmlCleaner. –

+0

вот вопрос htmlParser: http://stackoverflow.com/questions/2660866/parsing-html-using-htmlparser спасибо! – Blankman

1

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