java正则表达式否定一个字符并替换字符串

时间:2013-09-18 10:50:43

标签: java regex regex-negation

String s = "=?ISO-2022-JP?B?GyRCRZi?= =?ISO-2022-JP?B?QDg7OlWiE8?= =?ISO-2022-JP?B?JTkkT=?= =?ISO-2022-JP?B?kjaHaA?=";
String replRegex = "[^=]\\?= =\\?ISO-2022\\-JP\\?B\\?";

stringtoDecode= s.replaceAll(replRegex, "" );

结果我得到的是

=?ISO-2022-JP?B?GyRCRZQDg7OlWiEJTkkT=?= =?ISO-2022-JP?B?kjaHaA?=

但我期待的是

=?ISO-2022-JP?B?GyRCRZiQDg7OlWiE8JTkkT=?= =?ISO-2022-JP?B?kjaHaA?=

结果中缺少字符?= =?ISO-2022-JP?B?。我希望"?= =?ISO-2022-JP?B?"替换为空字符串,如果它不是由"="主持。

我在这里做错了吗?请建议

1 个答案:

答案 0 :(得分:0)

[^=]部分正在使用字符i。您可以捕获此“消费”字符并替换它:

String replRegex = "([^=])\\?= =\\?ISO-2022-JP\\?B\\?";
stringtoDecode= s.replaceAll(replRegex, "$1" );

ideone demo

请注意,您无需转义连字符。 (只有当你的意思是字符类中的文字连字符并且连字符位于该字符类中间的某个地方时,才需要转义连字符。

OutPut:

=?ISO-2022-JP?B?GyRCRZiQDg7OlWiE8JTkkT=?= =?ISO-2022-JP?B?kjaHaA?=