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

时间:2011-10-23 03:21:17

标签: php regex

我正在尝试编写一个正则表达式,它将验证我正在开发的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)*\]

1 个答案:

答案 0 :(得分:1)

如果您只需要匹配这些案例,可以使用the following regular expression来解析它们:

^(?: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"