正则表达式可以识别/ * … * /注释

我有一个字符串包含/*...*/笔记,我试图摆脱他们。 例如:

 Hello /* this is a note */ 

所以基本上我试图找出一个正则表达式,可以找到一个/然后任何类型的字符序列,然后另一个/ 。 我试过这个:

 ("/+(\\w|\\W)*+/").toRegex() 

…但它不工作。

你必须逃脱特殊字符

  /(\/\*.+?\*\/)/ 

http://regexr.com/3dd28

试试这个模式(也可以在/* .. */之间多行)

编辑:根据mszymborski的建议。

 (\/\*[\w\'\s\r\n\*]*\*\/)|(\/\*.*?\*\/) 

regex101 DEMO

在这里输入图像描述

*+是所有格 ,所以(\w|\W)*+匹配到字符串的末尾,并拒绝退回来让最后的/匹配。 我认为你的意思是:

 "(?s)/.*?/"` 

(?s)打开DOTALL模式,允许. 匹配换行符; 这比(\w|\W)更有效率。 这个? 使.*非贪婪,所以它停在下一个/ 。 不过,我想你可能想要这样的:

 "(?s)/\\*.*?\\*/" 

我不知道你在匹配什么样的文本,但是如果它是一种编程语言, *很可能是注释分隔符的一部分,而a /本身有其自己的,非常不同的含义。

不知道你想达到什么,但这是一个正则表达式匹配/* ... */注释: \/\*.*\*\/

使用此网站查找和调试解决方案http://regexr.com/

不幸的是,由于不支持递归模式,因此无法正确匹配Java / Kotlin RegEx中的/* .. */语法。

有问题的测试案例是:

 /* /* ... */ */ 

Kotlin编译器会将上面的代码解析为两个嵌套注释块。

实现任意级别的嵌套块的唯一方法是使用称为“正则表达式递归”的技术。 如上所述, Java递归支持Java正则表达式库不支持它。

我在这里看到的唯一解决方案(如果您确实需要正确解析任何 Kotlin代码)是为您编写自己的解析器。