Java 为什么下面的程序有PatternSyntax例外?
我得到以下程序的模式语法异常。我使用Java 为什么下面的程序有PatternSyntax例外?,java,regex,exception,Java,Regex,Exception,我得到以下程序的模式语法异常。我使用“\\\”避开了反斜杠,但仍然有一个例外,即: Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 1 \left( ^ 代码如下: String[] paren = {"\\big(","\\Big(","\\bigg(","\\Bigg(","\\left("}; for(Stri
“\\\”
避开了反斜杠,但仍然有一个例外,即:
Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 1
\left(
^
代码如下:
String[] paren = {"\\big(","\\Big(","\\bigg(","\\Bigg(","\\left("};
for(String x : paren){
if(line.contains(x))
line=line.replaceAll(x, "("); //error on this line
}
谢谢。
\l
是无效的转义序列,您已取消转义(
)
请注意,如果要匹配文本反斜杠,需要对其进行双转义,然后再次转义,因为它都位于字符串文本中。这就是为什么“\\l”
被解析为正则表达式模式\l
(这是一个无效的转义序列)。以及“\\b”
和“\\b”
被解析为转义序列\b
和\b
,它们是单词和非单词边界
假设要匹配文字反斜杠,请尝试以下操作:
{"\\\\big\\(","\\\\Big\\(","\\\\bigg\\(","\\\\Bigg\\(","\\\\left\\("};
但是,您的包含(…)
调用将不再有效
或者更好/更安全,让Pattern
正确引用/转义您的输入:
String[] paren = {"\\big(","\\Big(","\\bigg(","\\Bigg(","\\left("};
for(String x : paren){
if(line.contains(x)) {
line = line.replaceAll(Pattern.quote(x), "(");
}
}
如果您的目标是替换每个文本
“\\big(
,”\\big(
,“\\bigg(
,),\\bigg(
,)”)\\left(“
然后避免使用replaceAll
,因为它使用regex作为表示应替换值的第一个参数。在您的情况下,要替换的字符串包含regex元字符,如(
或类似\\b
\\b
的锚定,所以即使这不会引发异常,您也不会得到想要的结果
相反,请使用replace
(不带All
后缀)方法,该方法将自动转义所有正则表达式元字符,因此可以避免未转义(
)等问题
所以试试看
String[] paren = {"\\big(","\\Big(","\\bigg(","\\Bigg(","\\left("};
for(String x : paren){
if(line.contains(x))
line=line.replace(x, "(");
}
尝试转义
(paren
的值中的。String#replaceAll
方法通过正则表达式模式编译器传递其第一个参数,(
对分组有特殊的正则表达式含义,但也要求结束)
您的参数值没有。@ajp15243,谢谢!您的解决方案有效:)