开发者

Parse IF condition using Regular Expression

开发者 https://www.devze.com 2023-02-27 00:41 出处:网络
I need to create the RE meets the following IF condition string InputValue=\" If (X.Value==” X”) thenX.Value = “X”;

I need to create the RE meets the following IF condition

 string InputValue=" If (X.Value==” X”) then   X.Value = “X”;
    Elseif (X.Value==” X”) then X.Value = “X”;
    Elseif (X.Value==” Y ") then X.Value = “Y”;
    Elseif (X.Value== ” Z ")  then X.Value = “Z”;
    Else X.Value = “M”;";

as you know its only 1 if and 0 or many ElseIF and 0 or 1 Else and also i want to consider space and Enter I try to use the following RE but its failed

    string pattern="If\([a-z]*\.Value==""[a-z]*""\) Then [a-z]*\.Value=""[a-z]*""\;
(ElseIf\([a-z]*\.Value==""[a-z]*""\) Then [a-z]*\.Value=""[a-z]*""\;)*
(Else [a-z]*\.Value=""[a-z]*""\;)?";

bool result = Regex.IsMatch(InputValue, pattern, RegexOptions.Igno开发者_运维知识库reCase);

All ideas are welcomed


As in http://ideone.com/onS2e:

string condition  = @"[_a-z]\w* \.VALUE \s* == \s* "" [^""]* """;
string assignment = @"[_a-z]\w* \.VALUE \s* =  \s* "" [^""]* "" \s* ;";
string pattern    = string.Format(
    @"\b     IF \s* \( \s* {0} \s* \) \s* THEN \s+ {1} \s*
    ( \b ELSEIF \s* \( \s* {0} \s* \) \s* THEN \s+ {1} \s* )*  # repeat ELSEIF any number of times
    ( \b ELSE                                  \s+ {1}     )?  # at most one ELSE",
    condition, assignment);

Regex myRegex = new Regex( pattern, RegexOptions.IgnorePatternWhitespace |
    RegexOptions.IgnoreCase | RegexOptions.Singleline );

Updated:

As in http://ideone.com/1coOp:

string pattern    = string.Format(
    @"^ \s*    IF \s* \( \s* {0} \s* \) \s* THEN \s+ {1} \s*
      ( \b ELSEIF \s* \( \s* {0} \s* \) \s* THEN \s+ {1} \s* )*  # repeat ELSEIF any number of times
      ( \b ELSE                                  \s+ {1}     )?  # at most one ELSE
        \s* $",
    condition, assignment);
0

精彩评论

暂无评论...
验证码 换一张
取 消