2

我需要?用另一个令牌(我们可以从!什么开始)替换一个特定的令牌(在这种情况下,)。String 的replaceAll方法可以解决这个问题。但是,如果问号恰好跟在 token 后面,我不想替换它action。(那会很糟糕!)

我试过text = text.replaceAll("[^a][^c][^t][^i][^o][^n]\\?","!");了,但没有奏效。

例如,我想"test.action?param=lol?omg";变成test.action?param=lol!omg. 我知道我可以做一些愚蠢的事情

text.replaceAll("action\\?","%%%CRAZYTOKEN%%%")
    .replaceAll("\\?","!")
    .replaceAll("%%%CRAZYTOKEN%%%","action?");

但这似乎是在浪费时间,尤其是在大弦上。我宁愿做对。

4

2 回答 2

2

你需要消极看待背后

text.replaceAll("(?<!action)\\?", "!");

断言?不遵循action

于 2012-12-02T00:57:17.817 回答
2

只需使用零宽度负后向断言来仅匹配遵循?的 s :action

text = text.replaceAll("(?<!action)\\?", "!");

请注意\\. ?您需要转义,?因为它是正则表达式中的特殊字符。

于 2012-12-02T00:57:33.947 回答