正则表达式匹配一个字符串,但失败相同

时间:2016-10-18 13:52:16

标签: java regex

我尝试在regex中使用java从字符串中提取一些信息。对于演示,我有以下(看似愚蠢的代码):

Pattern featureIndexValuePattern = Pattern.compile("([\\w_ \\-\\.\\=]+)\\s+(\\d+)");


String str = "member_currentCompany9042547 0";

String str1 = "member_currentCompany9042547 0";

Matcher match = featureIndexValuePattern.matcher(str);

if (match.find()) {
    System.out.println("FOUND!");
    System.out.println(match.group(0));
    System.out.println(match.group(1));
    System.out.println(match.group(2));
}

match = featureIndexValuePattern.matcher(str1);

if (match.find()) {
    System.out.println("FOUND!");
    System.out.println(match.group(0));
    System.out.println(match.group(1));
    System.out.println(match.group(2));
}

我得到的输出是

FOUND!
9042547 0
9042547
0
FOUND!
member_currentCompany9042547 0
member_currentCompany9042547
0

实际上两个输入字符串完全相同,只是第一个是从文件中复制粘贴而后者是硬编码的。我无法找到输出不同的原因。我怀疑它是字符编码。有人能帮我理解这里发生了什么吗?

谢谢, NIKHIL

1 个答案:

答案 0 :(得分:0)

在评论中提出Andy Turner后的建议

Arrays.toString(str.toCharArray())

我可以看到非打印unicode字符(9之前):

 str: [m, e, m, b, e, r, _, c, u, r, r, e, n, t, C, o, m, p, a, n, y, , 9, 0, 4, 2, 5, 4, 7,  , 0]
 str1: [m, e, m, b, e, r, _, c, u, r, r, e, n, t, C, o, m, p, a, n, y, 9, 0, 4, 2, 5, 4, 7,  , 0]

\\p{C}添加到模式解决了问题。

尼基尔