首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex升华为Java regex

Regex升华为Java regex
EN

Stack Overflow用户
提问于 2016-05-30 08:47:03
回答 2查看 158关注 0票数 1

我有这个regex来删除.c文件中的注释(崇高3 regex)

代码语言:javascript
复制
(^\/\/.*)|(\s+\/\/.*)|((\/\*)(.|\n)+?(\*\/)) 

我可以在java中使用这个regex以编程方式使用它吗?如果没有,我应该使用什么正则表达式?(我知道,问我们愚蠢一点,但我一点也不知道该怎么做。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-30 08:58:33

请注意,模式中有太多冗余捕获组,(.|\n)+?构造效率很低,可能会在Java中引起严重问题(与任何其他regex引擎一样)。

您可以使用更多的流线表达式,这些表达式不应导致过多的冗余回溯:

代码语言:javascript
复制
(?:^|\s+)//.*|/\*[^*]*\*+(?:[^/*][^*]*\*+)*/

regex演示。与Pattern.MULTILINE标志一起使用它(或者在模式的开头添加(?m) )。

模式解释

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

Java声明:

代码语言:javascript
复制
String pattern = "(?m)(?:^|\\s+)//.*|/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/";

和一个样本代码

代码语言:javascript
复制
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, "")); 
票数 1
EN

Stack Overflow用户

发布于 2016-05-30 09:06:31

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

Ideone演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37521346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档