【问题标题】:Turn user supplied string into a literal string, to append a pre-defined regular expression将用户提供的字符串转换为文字字符串,以附加预定义的正则表达式
【发布时间】:2026-01-10 05:10:01
【问题描述】:

我有一个用户提供的字符串,然后我需要将其转换为正则表达式,其中他们的字符串被视为文字,然后我在末尾附加一个预先编写的正则表达式。

本质上是一种表达“用户提供了什么,然后是这种模式”的方式。

这让我觉得我可能需要清理用户提供的字符串,以转义元字符。

例如,这是我尝试过的

\\ Replace "\" with "\\"
String rE = userText.replaceAll("\\", "\\\\");
\\ Replace . with \.
rE = rE.replaceAll(".", "\\.");

但是,当匹配 \ 转义时,这会失败并显示以下消息

Execution aborted because of unhandled exception:
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
^ at java.util.regex.Pattern.error(Pattern.java:1725)
at java.util.regex.Pattern.compile(Pattern.java:1478)

有没有更简单的方法来做到这一点?我怀疑有一种内置方法可以将潜在的正则表达式转换为文字,但我找不到它。

我看过类似的问题,但似乎没有人愿意将用户输入的字符串视为文字。

【问题讨论】:

    标签: java regex


    【解决方案1】:

    使用Pattern.quote 方法将用户提供的字符串引用为literal 模式。

    【讨论】:

      【解决方案2】:

      使用Pattern.quote method 转义所有元字符或转义序列:

      String rE = Pattern.quote("\\");
      

      此方法生成一个String,可用于创建一个Pattern,该Pattern 将匹配字符串s,就好像它是一个文字模式一样。

      【讨论】: