【问题标题】:Regular expression for validating variable assignment用于验证变量赋值的正则表达式
【发布时间】:2011-10-23 03:21:17
【问题描述】:

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

【问题讨论】:

  • 我肯定有人会这么说,但让我成为第一个。这是一项更适合解析器和词法分析器的任务。
  • 我将把它转换为 php,但在有人开始使用它之前,它不是一种模板语言。它是一种可供最终用户使用的语言。功能非常有限,这使我可以在转换和被 php 解析之前从本质上验证代码。验证是一项要求,因为用户不可能用错误的代码“破坏”事物。

标签: php regex


【解决方案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"

【讨论】:

  • 分配的数量没有限制,而且你的正则表达式会允许太多。
  • 这个正则表达式允许任意数量的赋值。它允许什么不应该?我只是使用了你所有的例子,并添加了一些我自己的例子。
  • 抱歉,当我第一次看到这个时,我并没有真正清醒。它基本上可以满足我的需要。我已经用我的工作正则表达式更新了我的问题。
猜你喜欢
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
  • 2021-10-29
  • 2020-10-09
  • 1970-01-01
  • 2011-06-17
相关资源
最近更新 更多