【问题标题】:PHP - Regular Expression Multiple Option ParsingPHP - 正则表达式多选项解析
【发布时间】:2012-04-09 10:14:45
【问题描述】:

我不擅长正则表达式,因此需要一些帮助:

我需要在一个内容中用一个正则表达式找到多个选项:

  1. {{ Value }} - 总是
  2. {{ Value | Value 2 }} - 可选的第二部分 - |价值 2
  3. {{ Value | Value 2(Value3) }} - 可选的第三部分 - (Value3)

规则:值之前或之后允许有空格

我得到的是这个,但它不能满足所有三个需求和可选:

/\{{(.*)|(.*)}}/siU

【问题讨论】:

    标签: php regex parsing templates


    【解决方案1】:
    /\{{2}\s*?(.+)(?:\s*?\|\s*?(.+)\s*?(?:\(\s*?(.+)\s*?\))?)?\s*?\}{2}/isU
    

    请自己美化一下。

    • \{{2} 是一个左大括号 (\{),正好是其中的两个 ({2})。
    • \s*? 是一个空格 (\s),零次或多次 (*) 和尽可能多的空格 (? 在非贪婪模式下)
    • (.+) 是任意字符 (.),一次或多次 (+)
    • (?:x)? 是一个子表达式 x,它不会添加到结果中 (?:) 并且必须永远不会出现或出现一次(尾随 ?)。在这里,这用于使“值 2”部分成为可选。
    • \s*?\|\s*? 与找到的空格一样多,一个竖线和更多的空格(如果找到)。
    • 后面是另一个可选的“值 3”子表达式。
    • \(\s*?(.+)\s*?\) 是一个左括号 (\(),与找到的空格一样多(\s*?),实际内容(至少一个字符,.+),更多的空格和一个右括号。
    • \}{2} 是右大括号,也是其中的两个。

    【讨论】:

      【解决方案2】:

      我的方法

      /\{\{[\s\W]*((\w+)([\s\W]*\|[\s\W]*([\w]+)([\s\W]*\([\s\W]*(\w+)[\s\W]*\)[\s\W]*){0,1}){0,1})[\s\W]*\}\}/
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-24
        • 2017-05-10
        • 1970-01-01
        相关资源
        最近更新 更多