我需要两个正则表达式来识别if .. then .. else .. endif
节及其部分。
来自如下表达式:
示例 1:
5 + 10 * (if (4 + 4.5) > 0 then 20 else 45 endif) + 2
示例 2:
if (20 == 10) then 10 endif
示例 3:
if (20/10 != 2) then (2 * 10) else (3 * 4) endif
预期结果:
可以给我
if..endif
的正则表达式参与表达 对于前。从示例 1 我应该收到if (4 + 4.5) > 0 then 20 else 45 endif
分别可以给我
if..endif
的正则表达式部分。 对于前。从示例 1 我应该收到:
左比较器:(4 + 4.5)
接线员:>
右比较器:0
然后部分:20
其他部分:45
(可以为 null 或 string.Empty)
注意事项:
-
else
是可选的。 -
if..endif
可以是唯一的表达式,也可以是表达式的一部分。 -
then
&else
可以有一个表达式或一个静态值。 - 可以在 if 条件中使用的条件运算符是
>, <, ==, !=, >=, <=
- 正则表达式应该在 C# 应用程序 中工作。
最佳答案
正则表达式不太适合这种工作,因为你可以嵌套 if
/then
/else
并且因为可能变体(例如缺少 else
);正则表达式将是巨大的,并且需要大量的工作来平衡每次捕获的贪婪/懒惰。扫描每个字符并生成您随后可以解释的表达式树会容易得多。正则表达式更适合格式已知或几乎没有变化的文本解析。
编辑
想了想,其实也没那么难:
if(*.*?*)then(*.*?*)(?:else(*.*?*))?endif
每个捕获组包含组件:
- 条件
- 真值
- false 值(仅当存在
else
时)
我不保证准确性,因为它不适用于嵌套的 if
表达式,但对于您的需要它应该足够了。
关于c# - .NET正则表达式识别 `if .. then .. else .. endif`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3643891/