Regex - Java 中的特殊字符转义

问题描述 投票:0回答:1

我制作了以下正则表达式并使其在 Javascript(我最习惯的编程语言)中工作

/\[(?<urlLink>[a-zA-Z|\s]+)\]\((?<relativePath>\/\S+)\)/g
它应该在大的降价文本中找到这样的字符串: [我的链接在这里](/my/relative/path/here)

问题是,在使用java时,我收到有关“字符串文字中的非法转义字符”的错误消息,并且我似乎无法让它工作,因为我确实认为我正在转义正确的字符,这些字符是:( [ / ) 和 ]

我的javascript代码是这样的:

function findLinks(text, urlBase) {
    reg = new RegExp(/\[(?<urlLink>[a-zA-Z|\s]+)\]\((?<relativePath>\/\S+)\)/g)
    const result = text.replace(
        reg,
        `[$<urlLink>](${urlBase}$<relativePath>)`
    );
    console.log(text.match(reg))
    console.log(result);
}

findLinks("I intend to have a big mardkown text here, with some [links](/link/a) here and also [there](/anotherlink/b)", "https://mywebsite.com")

我的java代码的一部分,到目前为止是这样的:

contentProcess = contentProcess.replaceAll("\[(?<urlLink>[a-zA-Z|\s]+)\]\((?<relativePath>\/\S+)\)", String.format("[$<urlLink>](%s$<relativePath>)", urlBase))

我还没有测试 String.format() 函数是否可以添加到我的 urlBase 中,但是一旦我能够让我的正则表达式工作,我可以稍后再做这件事

java regex formatting
1个回答
0
投票

您收到的错误(字符串文字中的非法转义字符)可能来自您的正则表达式模式。在 Javascript 中,可以在正则表达式模式字符串中使用反斜杠,因为该语言知道可以在通常无法转义的正则表达式模式中转义特殊字符

(始终能够转义:

\n
\r
\t
等|能够以正则表达式模式转义:
\.
\[
\s
\w
等)

Java 中有一个简单的修复方法:在转义正则表达式模式字符时使用两个反斜杠代替一个反斜杠:(

\[
->
\\[
)

如果您使用以下 Java 代码,则

String.format()
函数应该按预期工作以插入 urlBase 值。让我知道这是否是您正在寻找的...

output = contentProcess.replaceAll(
    "\\[(?<urlLink>[a-zA-Z|\\s]+)\\]\\((?<relativePath>\\/\\S+)\\)",
    String.format("[$<urlLink>](%s$<relativePath>)", urlBase)
    );
© www.soinside.com 2019 - 2024. All rights reserved.