首页 >后端开发 >C++ >我们如何改进正则表达式以可靠地检测以分号结尾的 C for 和 While 循环?

我们如何改进正则表达式以可靠地检测以分号结尾的 C for 和 While 循环?

Barbara Streisand
Barbara Streisand原创
2024-12-15 03:41:13477浏览

How Can We Improve Regular Expressions to Reliably Detect C   For and While Loops Ending with Semicolons?

使用分号改进 C 循环检测的正则表达式

简介

原始问题寻求一个正则表达式来识别 C for 或 while 循环一个分号。提出的解决方案利用命名捕获组,但在循环的第三个表达式中包含函数调用时遇到了挑战。

增强正则表达式

为了解决此问题,开发了一种替代方法:

# match any line that begins with a "for" or "while" statement:
REGEX_STR = r"^\s*(for|while)\s*\("

# match a balanced substring, accounting for function calls within expressions:
SUB_STR_PATTERN = r"([^\(\)]|(\([^\(\)]*(?:\|\|[^()\s]*(?1))*?\)))"

# match a balanced string of arbitrary length, including function calls:
SUB_STR_GROUP = f"(?P<balanced>{SUB_STR_PATTERN})+"

# match the initial opening parenthesis, followed by balanced expressions, and finally the closing parenthesis.
REGEX_STR += f"{SUB_STR_GROUP}\)\s*;\s*"

# compile the regex object with MULTILINE and VERBOSE flags for readability
REGEX_OBJ = re.compile(REGEX_STR, re.MULTILINE | re.VERBOSE)

说明

此增强型正则表达式利用 SUB_STR_PATTERN 来定义可以包含函数调用的平衡子字符串。 ||运算符用于创建逻辑 OR 条件,允许模式匹配非括号字符或嵌套平衡字符串。

通过在 SUB_STR_GROUP 内重复此模式,正则表达式确保它可以匹配平衡序列表达式,无论其嵌套级别如何。

结论

这种改进的正则表达式为检测 C 提供了更强大的解决方案或 while 循环以分号终止,即使在循环的第三个表达式中存在函数调用的情况下也是如此。它消除了对递归模式的需要,从而简化了逻辑。

以上是我们如何改进正则表达式以可靠地检测以分号结尾的 C for 和 While 循环?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn