[英]A regular expression that would recognize a /*…*/ note
我有一個包含/*...*/
notes的字符串,我正試圖擺脫它們。 例如:
Hello /* this is a note */
所以基本上我試圖想出一個正則表達式,它會找到一個/
然后是任何類型字符的序列,然后是另一個/
。 我試過這個:
("/+(\\w|\\W)*+/").toRegex()
......但它不起作用。
嘗試這種模式(也允許/* .. */
之間的多行) :
編輯:根據mszymborski的建議。
(\/\*[\w\'\s\r\n\*]*\*\/)|(\/\*.*?\*\/)
*+
是占有性的 ,所以(\\w|\\W)*+
匹配到字符串的末尾並且拒絕退出以使最終/
匹配。 我想你的意思是:
"(?s)/.*?/"`
(?s)
打開DOTALL模式,允許.
匹配換行符; 這比(\\w|\\W)
更有效率。 的?
使.*
非貪婪,所以它在下一個/
停止。 但是,我想你可能想要這個:
"(?s)/\\*.*?\\*/"
我不知道你匹配什么樣的文本,但如果它是一種編程語言, *
很可能是注釋分隔符的一部分,而a /
本身有其自己的,非常不同的含義。
不確定你想要實現什么,但這里有一個與/* ... */
comment: \\/\\*.*\\*\\/
匹配的正則表達式
使用此站點查找和調試解決方案http://regexr.com/
不幸的是,由於它們不支持遞歸模式,因此無法正確匹配/* .. */
語法與Java / Kotlin RegEx。
有問題的測試用例是:
/*
/* ... */
*/
Kotlin編譯器將上面的代碼解析為兩個嵌套的注釋塊。
對於任意級別的嵌套塊實現該目的的唯一方法是使用稱為“正則表達式遞歸”的技術。 如此處所述, 具有遞歸支持的 Java Java regex庫不支持它。
我在這里看到的唯一解決方案(如果你確實需要正確解析任何 Kotlin代碼)就是為此編寫自己的解析器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.