簡體   English   中英

一個能識別/ * ... * / note的正則表達式

[英]A regular expression that would recognize a /*…*/ note

我有一個包含/*...*/ notes的字符串,我正試圖擺脫它們。 例如:

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 /本身有其自己的,非常不同的含義。

不確定你想要實現什么,但這里有一個與/* ... */ comment: \\/\\*.*\\*\\/匹配的正則表達式

使用此站點查找和調試解決方案http://regexr.com/

不幸的是,由於它們不支持遞歸模式,因此無法正確匹配/* .. */語法與Java / Kotlin RegEx。

有問題的測試用例是:

/*
    /* ... */
*/

Kotlin編譯器將上面的代碼解析為兩個嵌套的注釋塊。

對於任意級別的嵌套塊實現該目的的唯一方法是使用稱為“正則表達式遞歸”的技術。 如此處所述, 具有遞歸支持的 Java Java regex庫不支持它。

我在這里看到的唯一解決方案(如果你確實需要正確解析任何 Kotlin代碼)就是為此編寫自己的解析器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM