替换Java中的字符串模式

替换Java中的字符串模式,java,regex,Java,Regex,我有以下字符串 "value=\"\\d{4}((((0[1-9])|(1[0-2]))((0[1-9])|([12]\\d)|(3[01]))?)?|(\\-(((0[1-9])|(1[0-2]))(\\-((0[1-9])|([12]\\d)|(3[01])))?)?)?)d{4}" 在那里,我要替换所有出现的 "{" with NCHAR(0x7B) "}" with NCHAR(0x7D). “{}”之间的内容应保持不变: Ex: \\d{4} after replacing -&

我有以下字符串

"value=\"\\d{4}((((0[1-9])|(1[0-2]))((0[1-9])|([12]\\d)|(3[01]))?)?|(\\-(((0[1-9])|(1[0-2]))(\\-((0[1-9])|([12]\\d)|(3[01])))?)?)?)d{4}"
在那里,我要替换所有出现的

"{" with NCHAR(0x7B)
"}" with NCHAR(0x7D). 
“{}”
之间的内容应保持不变:

Ex: \\d{4} after replacing -> NCHAR(0x7B) 4 NCHAR(0x7D).
有没有在Java中使用正则表达式的方法


无论如何,这可以通过使用字符串操作处理整个字符串来完成。

我认为您的问题中不需要regexp,因为您希望替换每一个'{'和每一个'}'。这就是你的意思吗?或者仅当这些字符位于“\d”后面时才替换它们

theString = theString.replace("{", "NCHAR(0x7B)");
theString = theString.replace("}", "NCHAR(0x7D)");
编辑:

示例代码

public class QuickTest {
    public static void main(String args[]) {
        String theString = "toto \\d{123} 456 789";
        theString = theString.replace("{", "NCHAR(0x7B)");
        theString = theString.replace("}", "NCHAR(0x7D)");
        System.out.println(theString);
    }
}
结果

$> java QuickTest
toto \dNCHAR(0x7B)123NCHAR(0x7D) 456 789

我认为您的问题中不需要regexp,因为您希望替换每一个'{'和每一个'}'。这就是你的意思吗?或者仅当这些字符位于“\d”后面时才替换它们

theString = theString.replace("{", "NCHAR(0x7B)");
theString = theString.replace("}", "NCHAR(0x7D)");
编辑:

示例代码

public class QuickTest {
    public static void main(String args[]) {
        String theString = "toto \\d{123} 456 789";
        theString = theString.replace("{", "NCHAR(0x7B)");
        theString = theString.replace("}", "NCHAR(0x7D)");
        System.out.println(theString);
    }
}
结果

$> java QuickTest
toto \dNCHAR(0x7B)123NCHAR(0x7D) 456 789

由于需要替换所有出现的
{
}
,因此可以使用replaceAll()


由于需要替换所有出现的
{
}
,因此可以使用replaceAll()


我同意Aurélien Ribon的观点,但是如果你想使用正则表达式,你可以这样做

String data = "value=\"\\d{4}((((0[1-9])|(1[0-2]))((0[1-9])|([12]\\d)|(3[01]))?)?|(\\-(((0[1-9])|(1[0-2]))(\\-((0[1-9])|([12]\\d)|(3[01])))?)?)?)d{4}";
data = data.replaceAll("\\{", "NCHAR(0x7B)").replaceAll("\\}","NCHAR(0x7D)");

我同意Aurélien Ribon的观点,但是如果你想使用正则表达式,你可以这样做

String data = "value=\"\\d{4}((((0[1-9])|(1[0-2]))((0[1-9])|([12]\\d)|(3[01]))?)?|(\\-(((0[1-9])|(1[0-2]))(\\-((0[1-9])|([12]\\d)|(3[01])))?)?)?)d{4}";
data = data.replaceAll("\\{", "NCHAR(0x7B)").replaceAll("\\}","NCHAR(0x7D)");

你确定“\\d{4}”不应该变成“\\d NCHAR(0x7B)4 NCHAR(0x7D)”吗?你确定“\\d{4}”不应该变成“\\d NCHAR(0x7B)4 NCHAR(0x7D)”吗?@Barun我刚刚测试了它,它工作正常,请参见我的编辑。您使用什么版本的Java?您真的确定没有使用replaceAll()吗?replace()不使用regexp引擎,因此您的异常没有任何意义。@Barun我刚刚测试了它,它可以工作,请参阅我的编辑。您使用什么版本的Java?您真的确定没有使用replaceAll()吗?replace()不使用regexp引擎,因此您的异常没有任何意义。