gpt4 book ai didi

regex - kotlin String::replace 删除转义序列?

转载 作者:行者123 更新时间:2023-12-02 12:13:28 29 4
gpt4 key购买 nike

我正在尝试使用正则表达式进行一些字符串操作,但没有得到预期的输出

var myString = "/api/<user_id:int>/"
myString.replace(Regex("<user_id:int>"), "(\\d+)")

这应该给我类似 /api/(\d+)/ 的东西,但我得到的是 /api/(d+)/
但是,如果我像 var a = "\d+" 一样直接创建转义字符串
我得到了正确的输出 \d+ (我可以进一步使用它来创建一个正则表达式模式)
这是由于 String::replace 的工作方式吗?
如果是这样,这不是一个错误,为什么要删除我的转义序列?

最佳答案

要使替换为文字字符串,请使用:

myString.replace(Regex("<user_id:int>"), Regex.escapeReplacement("(\\d+)"))

有关详细信息,这就是 kotlin Regex.replace 正在做的事情:
  Pattern nativePattern = Pattern.compile("<user_id:int>");
String m = nativePattern.matcher("/api/<user_id:int>/").replaceAll("(\\d+)");

-> m = (d+)

来自 Matcher.replaceAll() javadoc:

Note that backslashes () and dollar signs ($) in the replacement string may cause the results to be different than if it were being treated as a literal replacement string. Dollar signs may be treated as references to captured subsequences as described above, and backslashes are used to escape literal characters in the replacement string.



上面对 Regex.escapeReplacement 的调用就是这样做的,将 (\\d+) 转换为 (\\\\d+)

关于regex - kotlin String::replace 删除转义序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49074632/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com