我正在尝试找出与Java String.replaceAll()
函数一起使用的正则表达式模式。我需要替换所有%26
,但我不希望它接收带有 '26'前缀的任何其他数字。
例如我想:
"abc%26def".replaceAll(regex, "&") to return "abc&def"
- 和 -
"abc%2623def".replaceAll(regex, "&") to return "abc%2623def" (no change)
我知道我可以轻松编写更多代码来完成此任务,但我想知道是否可以只使用一个replaceAll来执行此操作。
答案 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")
这可能适用于您的目的,也可能不适用,因为它还会将+
翻译为空格。