2013-10-28 56 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;