Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式中的非法转义字符错误_Java_Regex - Fatal编程技术网

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?”ఠ_ఠ - 是 啊我知道这听起来不太对,但有点接近(而且我懒得花时间把它输入谷歌)