没有比例子更好的解释方法了: 假设我有一个 for 循环:
for(int i = 0; i
我基本上想要一个将 i = 0、i 和 i++ 分为三个独立组的正则表达式。
到目前为止,我有这个:
for\s*\(\s*[^\w\s]?(\w+=\d+)\s*;\s*([^;]+)\s*;\s*([^)]+)\s*\)\s*({)?
它给了我 i 和 i++ 但由于第一部分的类型说明符,它没有给我 i = 0 并且我不知道该怎么做。
我还需要考虑什么时候根本没有类型说明符。如果 = 之前有两个单词,我基本上想跳过第一个单词。这是一个可能的正则表达式吗?
这个正则表达式:
for\s*\(\s*(?:\w+\s+)?(.+?\s*=\s*.+?)\s*;\s*(.+?);\s*(.+?)\s*\)
都有匹配组
i = 0
i<n
i++
for(int i = 0; i<n;i++){ for (i = 0;i<n;i++) {
如果您要针对一组固定的文件进行测试,并且您知道这些文件不会违反假设,那么这是一个不错的工具。
但请注意,这不是正确的解析。正则表达式无法解析嵌套结构(如平衡括号内的表达式)、宏,并且检测内部带有
;
解析 C++ 的完整语法是众所周知很难。