2

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

例如我想要:

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

- 和 -

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

我知道我可以轻松地多写几行代码来完成这项任务,但我想知道是否可以只用一个 replaceAll 来完成。

4

3 回答 3

4

您可以使用否定前瞻断言来防止匹配 where%26后跟另一个数字(您需要\在 Java 中转义,所以它会是\\d):

%26(?!\d)
于 2012-12-21T16:16:04.287 回答
2

您可以使用负前瞻来实现这一点。从手册

(?!X)   X, via zero-width negative lookahead
于 2012-12-21T16:16:38.143 回答
1

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

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

这可能会或可能不会满足您的目的,因为它也可以转化+为空间。

于 2012-12-21T16:20:09.153 回答