正则表达式:如何转义反斜杠和特殊字符?

2022-09-03 18:32:00

有没有办法转义(或保护)正则表达式中的特殊字符?

我想做的是创建一个简单的正则表达式测试器:

import java.util.regex.*;
class TestRegex { 
   public static void main( String ... args ) { 
       System.out.printf("%s ~= %s ? %s  %n" , args[0], args[1], Pattern.matches( args[0], args[1] ) );
   }
}

在将模式插入程序之前,这非常适合测试我的模式:

$java TestRegex "\d" 1
\d ~= 1 ? true  
$java TestRegex "\d" 12
\d ~= 12 ? false  
$java TestRegex "\d+" 12
\d+ ~= 12 ? true  
$java TestRegex "\d+" a12
\d+ ~= a12 ? false  
$java TestRegex "\d+" ""
\d+ ~=  ? false  

我接下来要做的就是在我的程序中使用此模式,但每次我都必须手动转义它:

Pattern p = Pattern.compile( /*copy pasted regex here */ );

在此示例中,将 : 替换为 .过了一会儿,这变得非常烦人 。\d\\d

Q.如何自动转义这些特殊字符?


答案 1

您只需要将所有单反斜杠替换为双反斜杠即可。这有点复杂,因为 函数 on 确实执行了一个正则表达式,您必须首先转义反斜杠,因为它是一个文字(正在产生),然后由于正则表达式(产生)再次转义它。替换遭受类似的命运,需要两个这样的转义序列,使其总共有8个反斜杠:replaceAllString\\\\\\

System.out.printf("%s ~= %s ? %s  %n", 
    args[0].replaceAll("\\\\","\\\\\\\\"), args[1], ...

答案 2