有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在htmlwith regex中查找url时遇到问题?

            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) 个答案

  1. # 1 楼答案

    您可以使用regex测试仪进行调试,例如here。更好的表达方式可能是https://secure\.runescape\.com/m=displaynames/s=[a-zA-Z1-9*]+/check_name\.ws\?displayname=

  2. # 2 楼答案

    根据正则表达式,测试表达式中缺少?

    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=

  3. # 3 楼答案

    看起来你的正则表达式一次只匹配一行。你确定你要搜索的URL总是在一行吗