2015-02-13 2 views
1

У меня есть друг, у которого это работало в определенный момент времени. При изучении регулярных выражений я не понимаю, почему у него будет//, поскольку тестеры песочницы не работают.java, regular expressions, & matcher

private static final Pattern SUB_URL_PATTERN = Pattern.compile("href=\"(/*\\w*/*\\w*/\\d+.html)\">",Pattern.CASE_INSENSITIVE | Pattern.DOTALL); 

Что такое/в приведенном выше шаблоне регулярного выражения? Этот шаблон сломан, и я не уверен, как это исправить.

Вот как это выходит в отладчик:

href="(/*\w*/*\w*/\d+.html)"> 

Является ли это как регулярное выражение сломается?

href="  ... matches href=" 
/*   ... matches 0 or more occurrences of/ 
\w*  ... matches 0 or more occurrences of word characters 
/*   ... matches 0 or more occurrences of/ 
\w*  ... matches 0 or more occurrences of word characters 
/  ... matches a/ 
\d+  ... matches one or several digits 
.html)"> ... matches /html 

Вот фрагмент источника веб-страницы, что он должен ударять на захват HREF = "/ рео/4890530477.html":

<a href="/reo/4890530477.html" class="i" data-ids="0:00j0j_jDfSzBcGgid"></a> 
+0

Так что не пытайтесь разобрать HTML с регулярным выражением Используйте HTML-парсер. – Jens

+1

/, вероятно, пытается совместить /. – immibis

ответ

0

Характер / не имеет какого-либо специального значение в Java
синтаксис регулярных выражений/язык. Это просто: литерал /.

Метасимволов поддерживаемого API Java RegExp являются: <([{\^-=$!|]})?*+.>

Смотрите здесь: http://docs.oracle.com/javase/tutorial/essential/regex/literals.html

1
final Pattern SUB_URL_PATTERN = Pattern.compile("href=\"/\\w+/\\w+/\\d+\\.html\"") 

должен соответствовать

href="/[word]/[word]/[number].html" 

Вы можете:

final Pattern SUB_URL_PATTERN = Pattern.compile("href=\"(/\\w+)*/\\d+\\.html\"") 

который будет соответствовать

href="[0+ groups of '/word']/[number].html" 

С Java, вам нужно использовать два обратных слеша \\, чтобы сделать строку, которая содержит обратную косую черту ... например, если вы хотите иметь регулярное выражение шаблон \d вам понадобится строка, объявленная как "\\d", потому что язык Java использует тот же escape-символ, что и регулярные выражения.

Я настоятельно рекомендую вам, может быть, час, чтобы пройти следующее свободный регулярные выражения учебника:

http://regexone.com/

Это интерактивное и кусок пирога, чтобы пройти. Когда вы закончите, я гарантирую, что вы поймете их в 100 раз лучше.

Для второго Jens, вероятно, лучше использовать синтаксический анализатор html, чем использовать регулярные выражения для этого. Вы можете проверить jsoup; это то, что я использую.

http://jsoup.org/

+0

Спасибо @joseph. Я возьму учебник – Jared