用于验证变量赋值的正则表达式


Regular expression for validating variable assignment

我试图写一个正则表达式,将验证一个变量赋值在一个BB风格的代码,我目前正在开发。

变量赋值是这样的

[assign {var_name} = "string value"]

你可以给多个变量赋值,比如

[assign {var1} = {var2} = true]

或者在变量中添加

[assign {var_name} .= " more..."]

递增/递减变量
[assign {var}++] or [assign {var}--]

赋一个负值

[assign {var1} = !{var2}]

到目前为止,我已经提出了以下的正则表达式不太工作

     /
       '[assign
         (?:
           ['s]*(?:
             ['!]?'{[^'}]+'}(?:(?:'+'+)|(?:'-'-))?
             |
             [0-9]+
             |
             '"[^'"]+'"
             |
             ''[^'']+''
             |
             true
             |
             false
           )['s]*(?:'=['s]*|'.'=['s]*)?
         )+
       ']
     /

我被以下内容困住了:

  • 我需要确保在每个部分之间使用。=或=
  • 并确保值和变量被分配给变量,而不是变量被分配给值
  • 最后确保有一个实际的赋值,除非值递增或递减

更新:工作正则表达式

       '[assign(?:'s)* 
         (
           '{[^'}]+'}
           (?:
             '+'+
             |
             --
             |
             (?:'s)*(?:'.)?=(?:'s)*
             (?:(?:!)?'{[^'}]+'}(?:'s)*(?:'.)?=(?:'s)*)*
             (?:
               [0-9]+
               |
               "[^"]+"
               |
               '[^']+'
               |
               true
               |
               false
               |
               (?:!)?'{[^'}]+'}
             )
           )
         )
       (?:'s)*']

如果您只需要匹配这些情况,您可以使用以下正则表达式来解析它们:

^(?:assign {var.*?})('+'+|--| (?:'.)?= ({var.*?} = )*(true|".+"|!{var.*?}))$

它将匹配以下内容:

assign {var_name} = "string value"
assign {var1} = {var2} = true
assign {var_name} .= " more..."
assign {var}++
assign {var}--
assign {var1} = !{var2}
assign {var235} = "two"
assign {var1} = {var2} = {var3} = true

它将不匹配以下内容:

assign lol = hi
assign {var3} = {var4}
assign {var5} = !"hi"