2013-10-28 97 views
0

我有一個簡單的程序,我試圖用正則表達式匹配Date和String。這是我的計劃Java正則表達式不匹配

Pattern r = Pattern.compile("((?:january|february|march|april|may|june|july|august|september|october|november|december)\\s*\\d{1,2}\\,\\s*\\d{4})\\s*\\|\\s*UPDATED", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); 
String textRegion = "<span>India Today Online</span>" 
      + " New Delhi, October 28, 2013 | UPDATED 11:42 IST " 
      + "</div>"; 
Matcher m = r.matcher(textRegion); 
if (m.find()) { 
    System.out.println("Matched"); 
} else { 
    System.out.println("Not Matched"); 
} 

但是當我運行這個程序顯示「不匹配」但是,當我試圖在http://gskinner.com/RegExr/同樣的事情,它讓我看到匹配的字符串。請幫助我瞭解我錯在哪裏。

我正面臨有趣的問題。我有兩個部分我的程序首先顯示不匹配,而第二部分顯示匹配。第一部分我從文本文件中複製了一個字符串。我無法理解這個問題。

String textRegion = "<span>India Today Online</span>" 
       + " New Delhi, October 28, 2013 | UPDATED  IST" 
       + "</div>"; 
     Pattern r = Pattern.compile("((?:january|february|march|april|may|june|july|august|september|october|november|december)\\s*\\d{1,2}\\,\\s*\\d{4})\\s*\\|\\s*UPDATED", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); 

     System.out.println(textRegion); 
     Matcher m = r.matcher(textRegion); 
     if (m.find()) { 
      System.out.println("Matched"); 
     } else { 
      System.out.println("Not Matched"); 
     } 



     Pattern r1 = Pattern.compile("((?:january|february|march|april|may|june|july|august|september|october|november|december)\\s*\\d{1,2}\\,\\s*\\d{4})\\s*\\|\\s*UPDATED", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); 
     String textRegion1 = "<span>India Today Online</span>" 
        + " New Delhi, October 28, 2013 | UPDATED IST" 
        + "</div>"; 
     Matcher m1 = r1.matcher(textRegion1); 
     if (m1.find()) { 
      System.out.println("Matched"); 
     } else { 
      System.out.println("Not Matched"); 
     } 

有趣的部分是,如果你將從這裏複製程序它的工作對我來說也很好。

+0

即使我在運行代碼時得到了*匹配*。你確定它顯示*不匹配*嗎? – SudoRahul

+0

運行代碼時,我也收到了「匹配」消息。你可能比你想象的要少。 ;) – Henrik

+0

你不需要轉義逗號作爲'\\,' – anubhava

回答

0

我查了一下發現Java的治療空間和不間斷空格(enter link description here)不同所以它沒有給予同樣的結果兩者的部分代碼。我在我的代碼中添加了一行,然後它工作得很好。

textRegion = textRegion.replaceAll("\\u00a0"," "); 

此代碼將空格替換爲非空格。正如我在我的程序中提到的,我從其他地方複製了文本,並且複製的文本具有非破壞空間而不是空間。但是當你從這裏複製代碼時,它的工作非常好,因爲你的複製代碼沒有非破壞空間。

感謝您的幫助!

0

檢查您是否使用正確的導入。

import java.util.regex.Matcher; 
import java.util.regex.Pattern;