无效的转义序列错误

时间:2018-05-24 01:00:28

标签: java regex

我正在使用REGEX验证域名。

我的正则表达式如下:

Str

效果很好here

n

但它在Java中给我一个错误

enter image description here

正则表达式有什么问题?

2 个答案:

答案 0 :(得分:1)

作为文字输入的Java正则表达式中的转义序列的问题是它们被解释两次:

  • 首先,Java编译器将每个转义序列解释为解析字符串文字的一部分,
  • 其次,Java Regex引擎将剩余的转义序列解释为准备匹配模式的一部分

这样做的一个重要结果是必须转义表达式中的每个斜杠才能使它通过Java编译阶段进入正则表达式编译阶段:

Pattern REGEX = Pattern.compile("^([a-z]*|\\*)\\.([a-z]*)\\.([a-z]*)");

这可能不是最易读的解决方案,因此另一种方法是使用字符类代替转义的单个字符:

Pattern REGEX = Pattern.compile("^([a-z]*|[*])[.]([a-z]*)[.]([a-z]*)");

答案 1 :(得分:0)

\是java中的转义字符。为避免这种情况,您必须在代码中添加额外的\,如下所示:

Pattern REGEX = Pattern.compile("^([a-z]*|\\*)\\.([a-z]*)\\.([a-z]*)");

文档:Characters