2011-05-11 61 views
0
  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);在html中找到url的問題 - 用正則表達式?

但是它不返回任何結果。難道我做錯了什麼?對於noobish問題抱歉,我仍然在學習java。

回答

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=

+0

哇非常感謝花花公子。它現在有效! :) – Kyle

1

您可以使用正則表達式測試程序進行調試,例如here。一個更好的表達式可能是https://secure\.runescape\.com/m=displaynames/s=[a-zA-Z1-9*]+/check_name\.ws\?displayname=

1

它看起來像你的正則表達式一次匹配在一行上。你確定你正在搜索的網址總是在一行嗎?