我在Oracle的紀錄片中讀到\z
表示輸入結束。但編輯器會拋出錯誤。 當java是最後一個單詞時,我需要在文本中找到單詞「java」。任何消化如何處理?爲什麼 z正則表達式對我不起作用?
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Why {
public static void main(String[] args) {
String language = "java";
String text = "I'm fan of java";
Pattern p = Pattern.compile("\\s" + language + "[\\W|\\z]");
Matcher m = p.matcher(text);
System.out.println(m.find()); // <-------------- Exception
}
}
// Exception in thread "main" java.util.regex.PatternSyntaxException:
// Illegal/unsupported escape sequence near index 11 \sjava[\W|\z]
這是一個邊界匹配器。你不能在角色類中使用它。你的意思是(\\ W | \\ z)'? –
零寬度斷言不保留它們在字符類中的含義。使用'(?:\\ W | \\ z)',或者只是'(?!\\ w)'。您似乎希望將某個單詞作爲整個單詞進行匹配,請檢查單純的「\ b」單詞邊界是否適合您。如果'language'可能以非單詞字符開始/結束,那麼'\ b'將不起作用。你可以使用'「(?<!\\ w)」+ Pattern.quote(language)+「(?!\\ w)」'。 –
'[..]'表示字符類(單個指定範圍)。 '\ z'不代表字符,而是* place *,就像'\ b'一樣,它也不是字符類的有效元素。順便說一句''''在'[..]'中是簡單的字符,而不是OR運算符。 – Pshemo