当我使用以下代码时,出现错误:
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 所说,Pattern
Java 中的 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()