我在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