【问题标题】:Regex Sublime to Java regex正则表达式 Sublime 到 Java 正则表达式
【发布时间】:2016-09-28 00:41:12
【问题描述】:

我有这个正则表达式来删除 .c 文件中的 cmets(sublime 3 正则表达式)

(^\/\/.*)|(\s+\/\/.*)|((\/\*)(.|\n)+?(\*\/)) 

我可以在 java 中使用这个正则表达式以编程方式使用它吗? 如果没有,我应该使用什么正则表达式? (P.S. 我知道,质疑我们有点愚蠢,但我根本不知道如何正则表达式)

【问题讨论】:

  • 是的,你可以使用它..你只需要在斜杠所在的地方双重转义.. p.s. 我并不是说它是用于评论捕获的正确正则表达式
  • 它在 sublime 中工作,所以它应该在 java 中,对吗?
  • 是的,它会......只有你需要在 Java 中使用时将斜杠转义......就像 \s\\s 和所有其他人
  • 这是一个非常低效的正则表达式,很可能会导致 Java 出现性能问题。

标签: java regex sublimetext3


【解决方案1】:

请注意,模式内有太多冗余捕获组,(.|\n)+? 构造效率非常低,可能会在 Java 中导致严重问题(与任何其他正则表达式引擎一样)。

您可以使用不会导致过多冗余回溯的更流线型表达式:

(?:^|\s+)//.*|/\*[^*]*\*+(?:[^/*][^*]*\*+)*/

请参阅regex demo。与Pattern.MULTILINE 标志一起使用(或在模式的开头添加(?m))。

模式解释

  • (?:^|\s+)//.* - (您的 2 个 (^\/\/.*)|(\s+\/\/.*) 分支合并)单行 cmets 在字符串开头或前 1+ 个空格后跟 // 子字符串(包括这些空格和正斜杠)
  • | - 或
  • /\*[^*]*\*+(?:[^/*][^*]*\*+)*/ - 匹配多行 /**/ cmets

Java 声明:

String pattern = "(?m)(?:^|\\s+)//.*|/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/";

还有一个sample code

String s =  "// Comment\ntex test\nMore text here // and comment 2\n/* More comments\nhere and\nhere */";
String pattern = "(?m)(?:^|\\s+)//.*|/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/";
System.out.println(s.replaceAll(pattern, "")); 

【讨论】:

    【解决方案2】:

    这应该可以:(?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|(?://.*)

    Ideone Demo

    【讨论】:

      猜你喜欢
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多