2014-01-09 47 views
0

我有以下HTML:正則表達式不匹配通配符

<tr><td><font color="#306eff">P: </font>9283-1000<font color="#306eff">&nbsp;&nbsp; 

OR(新行)

<tr><td><font color="#306eff">P: </font>9283-1000 

<font color="#306eff">&nbsp;&nbsp; 

我去regexpal.com,進入下面的正則表達式:

P: </font>(.*?)<font 

它匹配。但是,當我在Java中做到這一點,它不匹配:

Pattern rP = Pattern.compile(">P: </font>(.*?)<font"); 
    Matcher mP = rP.matcher(data); 

    if (mP.find()) { 
     System.out.println(mP.group(1).trim()); 
    } 

有多個正則表達式我試圖在不同的場合,他們根本就沒有在Java中工作。有什麼建議麼?謝謝!

+0

Java有它自己的REGEX – Keerthivasan

+0

[使用HTML解析器代替](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags?answertab=oldest #tab-top) – Reimeus

回答

1

默認情況下,點不匹配換行符。

使用Pattern rP = Pattern.compile(">P: </font>(.*?)<font", Pattern.DOTALL);

參考here

+0

非常感謝,解決了我的問題! – user2320462

2

您的作品適合我。

public static void main(String[] args) { 
     String data = "<tr><td><font color=\"#306eff\">P: </font>9283-1000<font color=\"#306eff\">&nbsp;&nbsp;"; 
     Pattern rP = Pattern.compile(">P: </font>(.*?)<font"); 
     Matcher mP = rP.matcher(data); 

     if (mP.find()) { 
      System.out.println(mP.group(1).trim()); 
     } 
    } 

此打印:9283-1000

我想問題可能在於如何將data饋送到程序中。
因爲你可以從這個輸出中看到代碼本身是OK的。

+0

我更新了代碼。輸入包含換行符。這就是爲什麼它不匹配。你能告訴我如何匹配嗎? – user2320462

0

嘗試此正則表達式,而不是:

(?ims).*?>P: </font>(.*?)<font.+ 

示例代碼

public static void main(String[] args) { 
    String data="<tr><td><font color=\"#306eff\">P: </font>9283-1000<font color=\"#306eff\">&nbsp;&nbsp;"; 
    Pattern rP = Pattern.compile("(?ims).*?>P: </font>(.*?)<font.+"); 
    Matcher mP = rP.matcher(data); 

    if (mP.find()) { 
      System.out.println(mP.group(1).trim()); 
    } 
} 

輸出

9283-1000

+0

不工作..任何其他提示? – user2320462

+0

@ user2320462您可以發佈您在問題中使用的數據嗎? – Stephan

+0

我更新了我的問題。輸入包含換行符。你能告訴我如何處理這個問題嗎?謝謝 – user2320462

0

試試這個:

String data="<tr><td><font color=\"#306eff\">P: </font>9283-1000<font color=\"#306eff\">&nbsp;&nbsp;"; 
Pattern rP = Pattern.compile(">P: </font>(.*?)<font"); 
Matcher mP = rP.matcher(data); 

if (mP.find()) { 
     System.out.println(mP.group(1).trim()); 
} 

在java中唯一的區別是在轉義字符。

+0

對不起,我沒有看到區別 – user2320462

+0

區別在於數據變量。在java字符串中字符必須在「」之間。在你的html代碼中有雙引號。所以你想逃避那些使用轉義字符\的字符。 –