Кодировка регулярных выражений Android

Я загружаю исходный код веб-сайта с помощью HttpClient, а затем хочу извлечь некоторые данные с помощью регулярных выражений. К сожалению, веб-сайт закодирован в iso-8859-1, что, похоже, вызывает проблемы. Вот пример кода для загрузки веб-сайта:

HttpGet query = new HttpGet(url);
HttpResponse queryResponse = httpClient.execute(query);
String queryText = EntityUtils.toString(queryResponse.getEntity()).replaceAll("\r", " ").replaceAll("\n", " ");

И тогда выражение:

Pattern patter = Pattern.compile("<p class=\"qt\">(.*?)</p>");
Matcher matcher = pattern.matcher(queryText);
while (matcher.find()) // do something

Проблема в том, что в нем отсутствуют некоторые случаи, когда есть специальные символы iso-8859-1. (.*?) не похоже на них. В чем причина этой проблемы? Как это исправить?


person Sebastian Nowak    schedule 28.10.2011    source источник
comment
То, что я хочу использовать регулярное выражение, является первой ошибкой; не могли бы вы просто использовать что-то вроде jsoup или tagsoup? В противном случае это могли быть вы.   -  person Dave Newton    schedule 28.10.2011


Ответы (1)


Вы уверены, что это связано со «специальными символами iso-8859-1», а не с новыми строками? . по умолчанию не соответствует терминаторам строк. Вы можете использовать DOTALL, чтобы также включить сопоставление терминаторов строки. например:

Pattern patter = Pattern.compile("<p class=\"qt\">(.*?)</p>", Pattern.DOTALL);
person Laurence Gonsalves    schedule 28.10.2011
comment
Символы новой строки \n и \r удаляются, как вы можете видеть в первом фрагменте кода. Удивительно, но упомянутый вами флаг привел к тому, что регулярное выражение соответствовало этим специальным символам, поэтому проблема была решена. Спасибо! - person Sebastian Nowak; 28.10.2011
comment
На самом деле я не заметил replaceAll в предыдущей строке, но есть и другие разделители строк, кроме \n и '\r' (например: \v и \f). У меня часто были ошибки, когда . не соответствовало всему, что я хотел, и каждый раз это было из-за отсутствующего DOTALL. - person Laurence Gonsalves; 28.10.2011