for (String line; (line = reader.readLine()) != null;) {//reads html page Pattern p = Pattern.compile("https://secure\\.runescape\\.com/m=displaynames/s=[a-zA-Z1-9*]+/check_name\\.ws\\?displayname="); Matcher m = p.matcher(line); if (m.find()) { System.out.println(m.group(0)); } }
Строка на странице выглядит следующим образом: callback_request("https://secure.runescape.com/m=displaynames/s=p2FAuYaMFDgzntbDei*324JUo*3ozJ7hR*h1KNlxc6kPaBeKCBrdKH5kzljYSfUa/check_name.ws?displayname=" + escape(text), handleResult);
callback_request("https://secure.runescape.com/m=displaynames/s=p2FAuYaMFDgzntbDei*324JUo*3ozJ7hR*h1KNlxc6kPaBeKCBrdKH5kzljYSfUa/check_name.ws?displayname=" + escape(text), handleResult);
Однако это не возвращает никаких результатов. Я делаю что-то неправильно? Извиняюсь за нубский вопрос, я все еще изучаю Java.
В соответствии с вашим регулярным выражением вы пропускаете ? в тестовом выражении.
?
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Regex { public static void main(String[] args) { Pattern p = Pattern.compile("https://secure\\.runescape\\.com/m=displaynames/.*/check_name\\.ws\\?displayname=(\\?)?"); Matcher m = p.matcher("callback_request(\"https://secure.runescape.com/m=displaynames/s=p2FAuYaMFDgzntbDei*324JUo*3ozJ7hR*h1KNlxc6kPaBeKCBrdKH5kzljYSfUa/check_name.ws?displayname=\" + escape(text), handleResult);"); if(m.find()) { System.out.println(m.group(0)); } } }
Полагаю, в displayname=? окончание ? происходит от escape(text), поэтому, есливы делаете ? в displayname=? необязательным, тогда это будет работать.Проверьте приведенный выше код для более подробной информации.
displayname=?
escape(text)
>> Вывод: https://secure.runescape.com/m=displaynames/s=p2FAuYaMFDgzntbDei*324JUo*3ozJ7hR*h1KNlxc6kPaBeKCBrdKH5kzljYSfUa/check_name.ws?displayname=
https://secure.runescape.com/m=displaynames/s=p2FAuYaMFDgzntbDei*324JUo*3ozJ7hR*h1KNlxc6kPaBeKCBrdKH5kzljYSfUa/check_name.ws?displayname=
Похоже, ваше регулярное выражение сопоставляется по одной строке за раз. Вы уверены, что искомый URL всегда будет в одной строке?
Вы можете использовать тестер регулярных выражений для отладки, например здесь .Лучшее выражение, вероятно, https://secure\.runescape\.com/m=displaynames/s=[a-zA-Z1-9*]+/check_name\.ws\?displayname=
https://secure\.runescape\.com/m=displaynames/s=[a-zA-Z1-9*]+/check_name\.ws\?displayname=