我正在尝试编写模式来识别公式 IF 形式字符串。
例如字符串
[@param_6@] @IF(@param_5@==null;@param_5@;@IF(1==1;@param_2@;@param_4@)@)@ - @param_3@ - <@IF(@parameter_tag2@ == null;@param_4@;@param_5@)@>
我想获得这个结果
1. Match: @IF(@param_5@==null;@param_5@;@IF(1==1;@param_2@;@param_4@)@)@
2. Match: @IF(@parameter_tag2@ == null;@param_4@;@param_5@)@
我的模式看起来像:
@IF\(.*\;.*\;.*\)@
但是正则表达式返回了错误的结果。
最佳答案
你可以使用
(?s)@IF\((?>(?!@IF\(|\)@).|(?<o>)@IF\(|(?<-o>)\)@)*\)@
请参阅regex demo 。 详细信息:
-
(?s)
-RegexOptions.Singleline
等效,.
现在也匹配 LF 字符 -
@IF\(
- 一个@IF(
字符串 -
(?>(?!@IF\(|\)@).|(?<o>)@IF\(|(?<-o>)\)@)*
- 零次或多次重复-
(?!@IF\(|\)@).|
- 任何不以@IF(
开头的字符或)@
字符序列 -
(?<o>)@IF\(|
- 一个@IF(
子字符串和值被推送到“o”组堆栈,或者 -
(?<-o>)\)@
- 一个)@
字符串和一个值从“o”组堆栈中弹出
-
-
\)@
- 一个)@
字符串
关于c# - 正则表达式公式 - 无法识别公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71395090/