1

当我使用以下代码时,出现错误:

 Matcher matcher = pattern.matcher("/Date\(\d+\)/");

错误是:

invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )

我还尝试将括号中的值更改为('/Date\(\d+\)/'); 没有任何成功。

我怎样才能避免这个错误?

4

3 回答 3

5

您需要双重转义您的\角色,如下所示\\

否则,您将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
于 2013-08-10T15:27:58.403 回答
1

您的正则表达式本身是正确的,但在 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.indexOftextToMatch.contains轻松地使用。

于 2013-08-10T15:30:58.837 回答
0

要在 Java 中转义正则表达式,您还可以使用Pattern.quote()

于 2013-08-10T23:09:50.067 回答