我的正则表达式无效的转义序列

时间:2016-05-30 01:20:02

标签: java regex

我继续使用我的正则表达式获取无效的转义序列

private String mathA = "(\d)[ + ](\d)\\s=\?";

我删除了正则表达式的每个部分,但无论我拿出什么,都不断给我同样的错误。我想匹配" 5 + 3 =?"其中5和3可以是任何数字。

2 个答案:

答案 0 :(得分:1)

您的表达式和代码中存在一些错误。

首先,你必须用另一个反斜杠来逃避反斜杠。此外,您使用的是字符类[...],因此如果您有[a e aaaa],则只会匹配ae。因此,[ + ]只会匹配空格或加号。

您可以将代码更改为:

private String mathA = "(\\d) [+] (\\d)\\s=\\?";
// or escaping +
private String mathA = "(\\d) \\+ (\\d)\\s=\\?";

顺便说一句,如果你想匹配多个数字,你可以使用:

private String mathA = "(\\d+) [+] (\\d+)\\s=\\?";

Regular expression visualization

答案 1 :(得分:0)

Java特别在字符串中处理字符\\。该字符被视为转义,以允许例如将新行表示为\n。要在字符串中获取文字反斜杠,您需要使用两个反斜杠\\\\

错误正在发生,因为Java看到了\\d,并且不知道如何处理它。

还要确保\\\\成为\\\\\\\\以解决正则表达式使用相同转义字符获取文字反斜杠的事实。代码中的四个反斜杠=字符串中的2 =匹配中的1个字面反冲。

此外,?不应转义,您不需要文字问号。