【问题标题】:java regular expression negate a character and replace stringjava正则表达式否定一个字符并替换字符串
【发布时间】:2013-09-18 10:50:42
【问题描述】:
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?" 替换为空字符串。

我在这里做错了吗?请推荐

【问题讨论】:

  • 你的正则表达式没有异常吗?悬空元字符之类的?

标签: java regex regex-negation


【解决方案1】:

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

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

ideone demo.

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

输出:

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

【讨论】:

    猜你喜欢
    • 2014-08-25
    • 1970-01-01
    • 2013-01-21
    • 2018-07-13
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多