Java正则表达式中的非法转义字符错误
我读过,最后有一个练习: 仅当某人的名字和姓氏相同时,使用反向引用编写与该人姓名匹配的表达式 我已经编写了下一个程序Java正则表达式中的非法转义字符错误,java,regex,Java,Regex,我读过,最后有一个练习: 仅当某人的名字和姓氏相同时,使用反向引用编写与该人姓名匹配的表达式 我已经编写了下一个程序 但是当我编译它时,我得到了一个错误: PersonName.java:18: illegal escape character p = Pattern.compile("([A-Z][a-zA-Z]+)\s+\1"); ^ 如果我这样重写18行: pattern = Pattern.compile(co
但是当我编译它时,我得到了一个错误:
PersonName.java:18: illegal escape character
p = Pattern.compile("([A-Z][a-zA-Z]+)\s+\1");
^
如果我这样重写18行:
pattern = Pattern.compile(console.readLine("%nEnter your regex: "));
然后在控制台中编写模式,程序就可以正常运行了。为什么我不能像在第一个程序案例中那样使用模式?有什么方法可以修复它吗?您想将此文本转换为字符串:
([A-Z][a-zA-Z]+)\s+\1
但是,Java源代码中字符串文本中的\
是用于转义的字符(例如,tab的“\t”)。因此,您需要在字符串文字中使用“\”以在结果字符串中使用一个反斜杠结束。所以你想要:
"([A-Z][a-zA-Z]+)\\s+\\1"
请注意,没有特定于此的正则表达式。任何时候,当您想要在Java字符串文本中表达包含反斜杠的字符串时,都需要转义该反斜杠。正则表达式和Windows文件名只是最常见的情况。\在字符串中需要转义。使用\\。它变成Pattern.compile(“([A-Z][A-zA-Z]+)\\s+\\1”);Java噢Java,你什么时候会有逐字字符串?@NullUserExceptionఠ_ఠ... 如果只有-可能在Java 10、11或12中?或者我记得在什么地方读到过被认为是“语法糖果”或类似的东西吗?@CodeJockey你是说“?@NullUserException?”ఠ_ఠ - 是 啊我知道这听起来不太对,但有点接近(而且我懒得花时间把它输入谷歌)