[英]Invalid escape sequence
我想過濾掉所有單詞,這些單詞包含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);
}
}
但是當我將正則表達式模式傳遞給matcher方法時,出現錯誤:
Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
我是否需要將\\d
換成另一個字母?
Regex
不適用於String
...
因此,您需要使用\\\\d
而不是\\d
-當您編寫\\
java時,它期望n
或b
或t
或a
以及其他幾個符號…… 之后 ,但是當您給d
它會給它帶來生命的震撼,並想一想到底。.我什么都不知道關於\\d
,因此我們需要告訴java \\
應該按字面意義取而代之,而不是期望它作為轉義符。
-如果是。 (點)當您輸入"."
時,情況變得更加復雜"."
java從字面上理解它,但是它是一個正則表達式,因此您需要使其看起來像這樣,因此在其前面加上\\
,因此它變為\\.
,現在又出現了與以前的問題相同的問題,因為現在Java在\\
之后接受n
或b
等,但它得到一個"."
,因此我們再次為它加上另一個\\
前綴,現在它變成\\\\.
在Java中,你需要躲避backslash
加上額外的反斜杠,表示字符串的模式時。
因此, \\b
應該是\\\\b
,而\\d
應該是\\\\d
。
您的代碼有兩個問題:
您的格式錯誤,因為它允許更多位數-請參閱http://regexr.com?32u3e
Java需要雙轉義斜線...
使用正則表達式模式
\\b(?=[A-Z]*\\d[A-Z]*\\b)[A-Z\\d]{4}\\b
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.