转义序列无效
我想过滤掉所有包含1个数字和3个大写字母且总长度为4的单词。请参阅我的示例: http : //gskinner.com/RegExr/?32taa
ArrayList result = new ArrayList(); for(int i = 0; i <= 10; i++){ String message = resp.data.get(i).message; Matcher m = MY_PATTERN.matcher("\b(?=[^\d]*\d[^\d]*)[AZ\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
吗?
您的代码有两个问题:
-
你的模式是错误的,因为它允许更多数字 – 请参阅http://regexr.com?32u3e
-
Java需要双重转义斜杠……
使用正则表达式模式
\\b(?=[AZ]*\\d[AZ]*\\b)[AZ\\d]{4}\\b
Regex
不适合String
…
所以你需要使用\\d
而不是\d
–当你写\
java期望n
或b
或t
或者其他几个…… 在它之后 ,但是当你给它时它会得到生命的震撼,想想到底是什么……我什么都不知道关于\d
,所以我们需要告诉java 应该从字面上理解它而不是期望它作为转义字符。
–在案件中。 (点)当你给"."
时,它变得更加复杂"."
java从字面上理解,但它是一个正则表达式,所以你需要让它看起来像那样,所以你用\
前缀它,所以它成为\.
,现在再次出现与前一个问题相同的问题,因为现在java在\
之后接受n
或b
等,但它得到一个"."
,所以我们再次用另一个\
前缀,所以现在它变为\\.
在Java中,当用字符串表示模式时,需要使用额外的反斜杠来转义backslash
。
所以, \b
应该是\\b
,而\d
应该是\\d
。