簡體   English   中英

Python 3 正則表達式查找多行注釋

[英]Python 3 regular expression to find multiline comment

我正在嘗試使用 Python 中的正則表達式在 PHP 源代碼中查找注釋塊 3. PHP 注釋采用以下格式:

/**
 * This is a very short block comment
 */

現在我想出了以下正則表達式:

'/\*\*[.]+?\*/'

我認為 - 結合 DOTALL 標志 - 應該這樣做,但不是。 它什么也沒找到。 奇怪的是,當我刪除尾部斜杠時,如下所示:

'/\*\*[.]+?\*'

然后它會找到以下字符串:

/**\n\t*

我不知道為什么正則表達式找不到星號后跟斜杠...我檢查了我正在搜索的文件以仔細檢查我在評論中沒有錯字(我沒有)。 斜杠在正則表達式中也不是特殊字符,所以我不必轉義它。 (我試過了,但沒有幫助。)

誰能告訴我我的正則表達式有什么問題? :)

順便說一句,我也遇到了這個 有人試圖在 Java 中做同樣的事情的線程,最終的獲勝答案以我現在的方式完成了他的正則表達式:所以我一無所知?(這可能是 Python 正則表達式中的錯誤還是我完全錯過了什么?

非常感謝任何幫助::D

您可以使用re.DOTALL標志來制作. 字符匹配換行符:

re.compile(r'/\*\*.+?\*/', re.DOTALL)

(附帶說明,PHP 塊注釋可以以/*開頭,而不僅僅是/** 。)

嘗試這個:

r'\/\*\*[^*]*\*+([^/][^*]*\*+)*\/'

(這是一些 CSS 解析器用於/* CSS comments */的正則表達式,所以我相信它非常可靠)

它與包括換行符和內部星號在內的確切格式不匹配,但您可以解決它。 這將匹配:

/**
 * This is a very short block comment
 */

但是也:

/** This is a very short block comment */

乃至:

/** This is a very short block comment 
*/

要匹配文檔塊的確切格式,您需要一個真正的解析器,而不是正則表達式。

暫無
暫無

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

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