【发布时间】:2016-05-30 01:20:02
【问题描述】:
我的正则表达式不断得到无效的转义序列
private String mathA = "(\d)[ + ](\d)\\s=\?";
我删除了正则表达式的每一部分,但无论我拿出什么,它总是给我同样的错误。我想匹配“5 + 3 =?”其中 5 和 3 可以是任意数字。
【问题讨论】:
我的正则表达式不断得到无效的转义序列
private String mathA = "(\d)[ + ](\d)\\s=\?";
我删除了正则表达式的每一部分,但无论我拿出什么,它总是给我同样的错误。我想匹配“5 + 3 =?”其中 5 和 3 可以是任意数字。
【问题讨论】:
您的表达式和代码中有一些错误。
首先,您必须使用另一个反斜杠来转义反斜杠。此外,您正在使用字符类[...],因此如果您有[a e aaaa],则它只会匹配ae。所以,[ + ] 只会匹配空格或加号。
您可以将代码更改为:
private String mathA = "(\\d) [+] (\\d)\\s=\\?";
// or escaping +
private String mathA = "(\\d) \\+ (\\d)\\s=\\?";
顺便说一句,如果你想匹配多个数字,你可以使用:
private String mathA = "(\\d+) [+] (\\d+)\\s=\\?";
【讨论】:
Java 在字符串中特别对待字符\\。该字符被视为转义符,以允许将新行表示为\n。要在字符串中获取文字反斜杠,您需要使用两个反斜杠\\\\。
发生错误是因为 Java 看到了,例如 \\d,但不知道如何处理它。
还要确保您的 \\\\ 变为 \\\\\\\\ 以规避正则表达式使用相同的转义字符来获得文字反斜杠这一事实。代码中的四个反斜杠 = 字符串中的 2 个 = 匹配中的 1 个文字反斜杠。
另外,? 不应该被转义,你不想要文字问号。
【讨论】: