正则表达式可以识别/ * … * /注释
我有一个字符串包含/*...*/
笔记,我试图摆脱他们。 例如:
Hello /* this is a note */
所以基本上我试图找出一个正则表达式,可以找到一个/
然后任何类型的字符序列,然后另一个/
。 我试过这个:
("/+(\\w|\\W)*+/").toRegex()
…但它不工作。
试试这个模式(也可以在/* .. */
之间多行) :
编辑:根据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代码)是为您编写自己的解析器。