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

标签 java regex

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

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

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。过了一会儿,这变得非常烦人。

问。如何自动转义这些特殊字符?

最佳答案

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

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

关于java - 正则表达式:如何转义反斜杠和特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4653831/

相关文章:

java - 有一个带有文件夹路径的字符串,如何将其转换为文件以便能够使用 getDesktop.open() 打开它?

java - 我需要做什么才能使用 Guice?

java - 匹配双引号但不匹配反斜杠双引号的正则表达式

Java正则表达式提取字符串的公共(public)元素并删除前导逗号

java - 分割字符串保留一些分隔符但删除另一个

java - 使用通用集合

java - 运行 Eclipse 项目时抛出未找到 bundle 异常

java - java程序员经常使用什么报告工具/库?

java - Groovy 为每个匹配项返回一个数组

regex - 执行错误 : from org. apache.hadoop.hive.ql.exec.DDLTask