当我使用以下代码时,出现错误:
Matcher matcher = pattern.matcher("/Date\(\d+\)/");
错误是:
invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
我还尝试将括号中的值更改为('/Date\(\d+\)/'); 没有任何成功。
我怎样才能避免这个错误?
您需要双重转义您的\角色,如下所示\\:
否则,您将String被解释为您试图逃跑(。
与其他圆括号和 d 相同。
实际上,您似乎正在尝试在Pattern此处初始化 a ,同时pattern.matcher引用您希望Pattern匹配的文本。
最后,请注意,在 a 中Pattern,转义字符需要双重转义,如下所示:
\\(\\d+\\)
此外,正如 Rohit 所说,PatternJava 中的 s 不需要被正斜杠 ( /) 包围。
实际上,如果您Pattern像这样初始化 a ,它会将您解释Pattern为以文字正斜杠开始和结束。
这是您可能想要做的一个小例子:
// your input text
String myText = "Date(123)";
// your Pattern initialization
Pattern p = Pattern.compile("Date\\(\\d+\\)");
// your matcher initialization
Matcher m = p.matcher(myText);
// printing the output of the match...
System.out.println(m.find());
输出:
true
您的正则表达式本身是正确的,但在 Java 中,反斜杠字符本身需要转义。
因此,这个正则表达式:
/Date\(\d+\)/
必须变成这样:
/Date\\(\\d+\\)/
一个反斜杠用于转义括号或d。另一个用于转义反斜杠本身。
您收到错误消息是因为 Java 认为您正在尝试将其\(用作单个转义字符,例如\n,或任何其他示例。然而,\(这不是一个有效的转义序列,所以 Java 抱怨。
此外,您的代码逻辑可能不正确。to 的参数matcher应该是要搜索的文本(例如,“/Date(234)/Date(6578)/”),而变量pattern应该包含模式本身。试试这个:
String textToMatch = "/Date(234)/Date(6578)/";
Pattern pattern = pattern.compile("/Date\\(\\d+\\)/");
Matcher matcher = pattern.matcher(textToMatch);
最后,正则表达式字符类的\d意思是“一位数”。如果您试图引用字面短语\\d,则必须使用它\\\\d来逃避它。但是,在这种情况下,您的正则表达式将是一个常数,您可以textToMatch.indexOf更textToMatch.contains轻松地使用。
要在 Java 中转义正则表达式,您还可以使用Pattern.quote()