Regex 匹配if-else if-else梯形图

Regex 匹配if-else if-else梯形图,regex,Regex,if-else if-else语句可以由以下任一部分组成: if→ 其他 if→ else if(如果此处为,则可能超过1个else) if→ else if(如果此处为,则可能超过1个else)→ 其他 如果→ 如果。它将是2个语句,而不是1个 如何编写与前3个选项匹配但与if-if不匹配的正则表达式,或者只与if匹配的正则表达式 // Successfully matches the first 3 options, but *also* matches the single "if".

if
-
else if
-
else
语句可以由以下任一部分组成:

  • if
    → <代码>其他
  • if
    else if
    (如果此处为
    ,则可能超过1个
    else)
  • if
    else if
    (如果此处为
    ,则可能超过1个
    else)→ <代码>其他
  • 如果→ <代码>如果。它将是2个语句,而不是1个
如何编写与前3个选项匹配但与
if
-
if
不匹配的正则表达式,或者只与
if
匹配的正则表达式

// Successfully matches the first 3 options, but *also* matches the single "if". Bad.
If( → Else If)?( → Else)?

如果您的regex Flavor支持lookarounds,则可以使用以下选项:

if(?!$)( → else if)*( → else)?
即“if”,后跟任意数量的“else-if”,然后是可选的“else”。因为最后两部分可以匹配0次,所以我们使用一个负的前瞻性来确保我们不会单独匹配“if”


你可以。

这是什么意思,“它与第四个匹配”?它应该产生两个单独的匹配项,这取决于您运行它的正则表达式引擎以及使用的标志…@deceze抱歉,我的意思是它将匹配单个
,如果
。现在我将编辑这个问题。因此,只有当整个字符串正好由一个
if
梯形图组成时,它才应该匹配,而如果它包含两个梯形图,它就根本不应该匹配?然后您需要添加
^
$
锚定…类似于
如果→ 其他(如有的话)→ 否则)
似乎应该适用于you@deceze它应该匹配
if
-
else
if
-
else if
,以及
if
-
else if
。它不应该只匹配
if
if
-
if
。因此,简单地添加
^
$
没有帮助。