1

我想过滤掉所有包含 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用另一个字母交换吗?

4

3 回答 3

5

Regex不适合String...

所以你需要使用\\d而不是\d

-当你写\ java时,期望要么nor bor or tora和其他几个......它之后,但是当你给d它它的生命时,你会感到震惊,想想到底是什么......我什么都不知道\d,所以我们需要告诉java\ 应该按字面意思理解而不是期望它作为转义字符。

-在 的情况下(点)它变得更加复杂,当你给"."java字面意思但它是一个正则表达式,所以你需要让它看起来像那样,所以你在它前面加上前缀\,所以它变成\.了,现在再次出现与之前相同的问题开始为现在 java 接受nor betc 之后,\但它得到 a ".",所以我们再次在它前面加上 another \,所以现在它变成了\\.

于 2012-11-25T18:20:36.083 回答
4

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

所以,\b应该是\\b\d应该是\\d

于 2012-11-25T18:20:27.790 回答
3

您的代码有两个问题:

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

  • Java需要双转义斜杠...

使用正则表达式模式

\\b(?=[A-Z]*\\d[A-Z]*\\b)[A-Z\\d]{4}\\b
于 2012-11-25T18:22:42.947 回答