如果可以使用正则表达式替换,这很奇怪

时间:2012-12-21 16:13:49

标签: java regex

我正在尝试找出与Java String.replaceAll()函数一起使用的正则表达式模式。我需要替换所有%26,但我不希望它接收带有 '26'前缀的任何其他数字。

例如我想:

"abc%26def".replaceAll(regex, "&") to return "abc&def"

- 和 -

"abc%2623def".replaceAll(regex, "&") to return "abc%2623def"  (no change)

我知道我可以轻松编写更多代码来完成此任务,但我想知道是否可以只使用一个replaceAll来执行此操作。

3 个答案:

答案 0 :(得分:4)

您可以使用negative lookahead assertion来阻止%26跟随另一个数字的匹配(您需要在Java中转义\,因此它将是{{1} }):

\\d

答案 1 :(得分:2)

你可以使用负前瞻来实现这一目标。来自manual

(?!X)   X, via zero-width negative lookahead

答案 2 :(得分:1)

您似乎在对百分比编码的八位字节进行解码,在这种情况下,您可能需要查看URLDecoder.decode

System.out.println(URLDecoder.decode("abc%26def", "UTF-8")

这可能适用于您的目的,也可能不适用,因为它还会将+翻译为空格。