如何转义正则表达式中的字符

Joh*_*rby 1 java regex

当我使用以下代码时,我遇到了错误:

 Matcher matcher = pattern.matcher("/Date\(\d+\)/");
Run Code Online (Sandbox Code Playgroud)

错误是:

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

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

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

Men*_*ena 5

你需要双重逃避你的\角色,如下所示:\\.

否则你String的解释就像你试图逃跑一样(.

与其他圆括号和d相同.

实际上,您似乎正在尝试初始化Pattern此处,同时pattern.matcher引用您希望与之Pattern匹配的文本.

最后,请注意,在Pattern转义中,转义字符需要双重转义,如下所示:

\\(\\d+\\)
Run Code Online (Sandbox Code Playgroud)

此外,正如Rohit所说,PatternJava中的s不需要被正斜杠(/)包围.

事实上,如果你初始化Pattern类似的东西,它会将你的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());
Run Code Online (Sandbox Code Playgroud)

输出:

true
Run Code Online (Sandbox Code Playgroud)