转义序列无效

时间:2012-11-25 18:19:19

标签: java regex

我想过滤掉包含1个数字和3个大写字母且总长度为4的所有单词。请参阅我的示例:http://gskinner.com/RegExr/?32taa

ArrayList<String> result = new ArrayList<String>();


for(int i = 0; i <= 10; i++){

    String message = resp.data.get(i).message;

    Matcher m = MY_PATTERN.matcher("\b(?=[^\d]*\d[^\d]*)[A-Z\d]{4}\b");

        while (m.find()) {
            String s = m.group(1);
            result.add(s);
        }
}

但是当我将我的正则表达式模式传递给匹配器方法时,我得到错误:

Invalid escape sequence (valid ones are  \b  \t  \n  \f  \r  \"  \'  \\ )

我是否需要将\d换成另一封信?

3 个答案:

答案 0 :(得分:5)

Regex不适合String ...

所以你需要使用\\d代替\d

- 撰写\ java 需要nbt或{{1很少有人...... 之后,但是当你给a时,它会受到生命的冲击,并想想到底是什么......我对{{ {1}},所以我们需要告诉java d 应该按字面意思理解,而不是期望它作为转义字符。

- (点)的情况下,它变得更加复杂,当你给\d java字面意思,但它是一个正则表达式,所以你需要让它看起来像这样,所以你用\作为前缀,所以它变成".",现在再次出现问题,因为现在java接受\或{{1在\.之后,它会得到一个n,因此我们再次将其作为另一个b的前缀,现在它变为\

答案 1 :(得分:4)

在Java中,当用字符串表示模式时,需要使用额外的反斜杠来转义backslash

因此,\b应为\\b\d应为\\d

答案 2 :(得分:3)

您的代码有两个问题:

  • 您的模式错误,因为它允许更多数字 - 请参阅http://regexr.com?32u3e

  • Java需要双重转义斜线...

使用正则表达式

\\b(?=[A-Z]*\\d[A-Z]*\\b)[A-Z\\d]{4}\\b