C++ for 循环条件的正则表达式

问题描述 投票:0回答:1

没有比例子更好的解释方法了: 假设我有一个 for 循环:

for(int i = 0; i

我基本上想要一个将 i = 0ii++ 分为三个独立组的正则表达式。

到目前为止,我有这个:

for\s*\(\s*[^\w\s]?(\w+=\d+)\s*;\s*([^;]+)\s*;\s*([^)]+)\s*\)\s*({)?

它给了我 ii++ 但由于第一部分的类型说明符,它没有给我 i = 0 并且我不知道该怎么做。

我还需要考虑什么时候根本没有类型说明符。如果 = 之前有两个单词,我基本上想跳过第一个单词。这是一个可能的正则表达式吗?

regex regex-lookarounds regex-group regular-language
1个回答
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++ 的完整语法是众所周知很难

© www.soinside.com 2019 - 2024. All rights reserved.