是否有一种方法可以在正则表达式中转义(或保护)特殊字符?
我想做的是创建一个简单的正则表达式测试器:
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
。过一段时间后,这会变得非常烦人。
问:我如何自动转义这些特殊字符?
Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
。链接为http://pastebin.com/aEWSibXv。 - OscarRyzreplaceAll
本身就是一个正则表达式。现在已经修复了。 - Mark Elliot