Java正则表达式不匹配

时间:2013-10-28 06:42:27

标签: java regex

我有一个简单的程序,我尝试使用正则表达式将Date与String匹配。这是我的程序

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");
}

但是当我运行这个程序时它会显示“Not Matched”但是当我在http://gskinner.com/RegExr/上尝试相同的事情时,它会显示匹配的字符串。请帮我理解我错在哪里。

我正面临着有趣的问题。我的程序的两个部分首先显示未匹配,而第二部分显示匹配。第一部分我从文本文件中复制了一个String。我无法理解这个问题。

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");
        }

有趣的部分是你是否会从这里复制程序它对我来说也很好。

2 个答案:

答案 0 :(得分:0)

检查您是否使用了正确的导入。

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

答案 1 :(得分:0)

我检查过并发现Java对空间和非破坏空间(enter link description here)的处理方式不同,这就是为什么它不能为两个代码部分提供相同的结果。我在代码中添加了一行,然后它工作得很好。

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

此代码用空格替换非破坏空间。正如我在程序中提到的那样,我从其他地方复制了文本,并且复制的文本具有那些非破坏空间而不是空间。但是,当你从这里复制代码时,它完全正常,因为你复制的代码没有非破坏空间。

感谢您的帮助!