我正在尝试使用Python 3中的正则表达式在PHP源代码中查找注释块.PHP注释采用以下格式:
/**
* This is a very short block comment
*/
现在我想出了以下正则表达式:
'/\*\*[.]+?\*/'
我认为 - 与DOTALL标志的组合 - 应该这样做,但不是。它找不到任何东西。奇怪的是,当我删除尾部斜杠时,就像这样:
'/\*\*[.]+?\*'
然后它找到以下字符串:
/**\n\t*
我不知道为什么正则表达式找不到星号后跟斜线...我检查了我正在搜索的文件,仔细检查我的评论中没有拼写错误(我没有)。 斜杠也不是正则表达式中的特殊字符,所以我不必逃避它。 (我试过,但没有帮助。)
谁能告诉我我的正则表达式有什么问题? :)
顺便说一句,我也遇到了this!有人试图用Java做同样的线程。最后的胜利答案以我现在的方式完成了他的正则表达式,所以我很无能为力:(这可能是Python正则表达式中的错误还是我完全错过了什么?
非常感谢任何帮助! :d
答案 0 :(得分:4)
您可以使用re.DOTALL
标记使.
个字符与换行符匹配:
re.compile(r'/\*\*.+?\*/', re.DOTALL)
(作为旁注,PHP块注释可以从/*
开始,而不仅仅是/**
。)
答案 1 :(得分:0)
试试这个:
r'\/\*\*[^*]*\*+([^/][^*]*\*+)*\/'
(这是/* CSS comments */
的一些CSS解析器使用的正则表达式,所以我相信它非常可靠)
它与包括换行符和内部星号在内的确切格式不匹配,但您可以解决它。这将匹配:
/**
* This is a very short block comment
*/
但是:
/** This is a very short block comment */
甚至:
/** This is a very short block comment
*/
要匹配docblock的确切格式,您需要一个真正的解析器,而不是正则表达式。