【问题标题】:Java RegEx removing "/*....*/" and "{.....}" [duplicate]Java RegEx 删除“/*....*/”和“{.....}”[重复]
【发布时间】:2023-03-19 06:43:01
【问题描述】:

我收到错误:“Invalid ecape sequence 在这个正则表达式上:

(\/\*[^/*]*(?:(?!\/\*|\*\/)[/*][^/*]*)*\*\/)|(\{.*?\})

还有其他更合适的正则表达式吗?或者我可以做些什么来修复这个正则表达式?

【问题讨论】:

  • 再次转义所有反斜杠。
  • 也许"(?s)/\\*.*?\\*/|\\{.*?}" 足以满足您的需求。

标签: java regex


【解决方案1】:

您需要再次转义反斜杠。这是 Java 字符串的一个“特性”。 Java 会“使用”您编写的反斜杠,因为它可以识别特殊字符,例如 '\t'。例如,当它在您的正则表达式的开头看到“\​​/”时,它认为您正在请求一个特殊字符,并且它会抱怨,因为该序列对于该目的无效。要在正则表达式中考虑反斜杠,您需要 '\\'。

话虽如此,这种处理 cmets 和大括号的整个方法通常不会起作用,因为它会遇到各种情况,例如大括号中的嵌套块。 (仅举一个例子。)

【讨论】:

    【解决方案2】:
    (\/\*[^\/*]*(?:(?!\/\*|\*\/)[\/*][^\/*]*)*\*\/)|(\{.*?\})
    

    这是正确的正则表达式,您错过了转义代表正则表达式序列开始和结束的正斜杠。

    这里是简化版(\/\*.*\*\/|\{.*\})

    【讨论】:

      猜你喜欢
      • 2020-09-03
      • 2018-03-13
      • 1970-01-01
      • 2022-08-10
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      相关资源
      最近更新 更多