gpt4 book ai didi

java - 用于正则表达式的引用/转义路径

转载 作者:行者123 更新时间:2023-12-04 06:01:03 26 4
gpt4 key购买 nike

考虑一条路径,例如

var dir = new File("""c:\test\project1""");



我如何在 Scala 中轻松转义/引用它以便它可以在正则表达式中安全使用

val extractRelativePath = (dir.getAbsolutePath() + """(.*)""").r



我尝试使用

dir.getAbsolutePath().replaceAll("\\", "\\\\");



但这不起作用。如以下示例所示
def main(args: Array[String]): Unit = {
var base = new File("""c:\test\project1""");
val extractRelativePath = (base.getAbsolutePath() + """(.*)""").r

var dir = new File("""c:\test\project1\somedir""");
var extractRelativePath(rel) = dir.getAbsolutePath().replaceAll("\\\\", "\\\\")
}

也没有一些标准功能可以跨平台安全地执行此操作,例如 Pattern.quote ?.

最佳答案

您可以使用 quotations ,但我认为在你的情况下你也需要逃避 \E .以下代码应该这样做:

("""\Q""" + base.getAbsolutePath.replaceAll("\\\\E", "\\\\E\\\\\\\\E\\\\Q") + """\E(.*)""").r

我一般更换 \E\E\\E\Q ,所以我拆分引用并明确添加 \\其次是 E在正则表达式中。

这是一个小例子。如果我定义了 base喜欢他的:
var base = new File("""c:\test\Earth""");

然后它将产生以下正则表达式:
\Qc:\test\E\\E\Qarth\E(.*)

作为这种方法的一个优势, \Q\E将逃脱一切,而不仅仅是 *\ .

这是整个示例代码:
var base = new File("""c:\test\Earth""");
val extractRelativePath = ("""\Q""" + base.getAbsolutePath.replaceAll("\\\\E", "\\\\E\\\\\\\\E\\\\Q") + """\E(.*)""").r

var dir = new File("""c:\test\Earth\somedir""");
var extractRelativePath(rel) = dir.getAbsolutePath

println(rel) // prints: \somedir

顺便一提

您也可以使用 Pattern.quote这完全相同,但更有效:
(Pattern.quote(base.getAbsolutePath) + """(.*)""").r

关于java - 用于正则表达式的引用/转义路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8892960/

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