Проблема с поиском URL в HTML - с регулярным выражением? - PullRequest
0 голосов
/ 12 мая 2011
            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);

Однако это не возвращает никаких результатов. Я делаю что-то неправильно? Извиняюсь за нубский вопрос, я все еще изучаю Java.

Ответы [ 3 ]

2 голосов
/ 12 мая 2011

В соответствии с вашим регулярным выражением вы пропускаете ? в тестовом выражении.

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=? необязательным, тогда это будет работать.Проверьте приведенный выше код для более подробной информации.

>> Вывод: https://secure.runescape.com/m=displaynames/s=p2FAuYaMFDgzntbDei*324JUo*3ozJ7hR*h1KNlxc6kPaBeKCBrdKH5kzljYSfUa/check_name.ws?displayname=

1 голос
/ 12 мая 2011

Похоже, ваше регулярное выражение сопоставляется по одной строке за раз. Вы уверены, что искомый URL всегда будет в одной строке?

1 голос
/ 12 мая 2011

Вы можете использовать тестер регулярных выражений для отладки, например здесь .Лучшее выражение, вероятно, https://secure\.runescape\.com/m=displaynames/s=[a-zA-Z1-9*]+/check_name\.ws\?displayname=

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