【问题标题】:How to escape special characters in the regex ***(.*)如何转义正则表达式中的特殊字符 ***(.*)
【发布时间】:2011-12-20 09:57:30
【问题描述】:

我是 Java 新手。有人可以帮帮我吗?

Java 中是否有任何方法可以自动转义以下正则表达式中的特殊字符?

转义前***(.*)和转义后\\*\\*\\*(.*)

我不想在这里转义 (.*)。

【问题讨论】:

  • “转义者”应该如何知道要转义哪个星号,不想转义哪个星号?你能为此制定一个规则吗?
  • @TimPietzcker。看到你的评论后,我有了一个线索。我可以在每个需要转义的特殊字符之前添加一个指示符。
  • 如果可以添加指标,为什么不添加反斜杠呢?
  • @TimPietzcker 是的,这是有道理的。我可以直接添加反斜杠,而不是添加不同的指标。所有这些正则表达式都来自 UI,所以我需要检查我的 UI 是否安全地允许我将反斜杠传递给我的 Java Web 服务。

标签: java regex escaping


【解决方案1】:

从表面上看,Pattern.quote 似乎可以胜任。

但是,查看您问题的详细信息,您似乎希望/期望能够转义某些元字符而不是其他元字符。 Pattern.quote 如果将其应用于单个字符串,则不会这样做。相反,它将引用每个字符。 (为了记录,它不使用反斜杠。它使用“\E”和“\Q”。\这巧妙地避免了解析字符串以查找需要转义的字符的成本。)

但真正的问题是,您还没有说明引用者应该如何决定哪些元字符要转义,哪些元字符要原封不动。例如,它如何知道转义前三个 '' 字符,而不是转义 "."?

如果没有更清晰的规范,您的问题几乎无法回答。即使有规范,也很难找到一种简单的方法来做到这一点。

IMO,更好的方法是在从其组成部分组装模式之前进行转义......假设这就是这里发生的事情。

【讨论】:

  • 感谢斯蒂芬的回答。我现在必须以某种方式说服我的客户:((
  • @JQone - 要求客户指定规则来区分特殊字符要转义和特殊字符不要转义。如果他们不能告诉你,你可以说你不能实现它。 (这是真的。)
猜你喜欢
  • 2015-12-27
  • 2013-12-28
  • 2012-04-18
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
相关资源
最近更新 更多