PHP - 正则表达式多选项解析

时间:2012-04-09 10:14:45

标签: php regex parsing templates

我对正则表达式非常不满意,因此需要一些帮助:

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

  1. {{ Value }} - 始终
  2. {{ Value | Value 2 }} - 可选的第二部分 - |价值2
  3. {{ Value | Value 2(Value3) }} - 可选的第三部分 - (值3)
  4. 规则:在值

    之前或之后允许使用空格

    我得到的是这个,但它并不适用于所有三种需求和可选:

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

2 个答案:

答案 0 :(得分:1)

/\{{2}\s*?(.+)(?:\s*?\|\s*?(.+)\s*?(?:\(\s*?(.+)\s*?\))?)?\s*?\}{2}/isU

请自行美化。

  • \{{2}是一个开头的大括号(\{),恰好其中两个({2})。
  • \s*?是一个空格(\s),零次或多次(*)且尽可能多(?处于不同模式)
  • (.+)是任何字符(.),一次或多次(+
  • (?:x)?是一个未添加到结果(?:)的子表达式x,必须永远或一次(尾随?)。这里用于使“值2”部分可选。
  • \s*?\|\s*?与找到的空格一样多,竖条和更多空格(如果找到)。
  • 接着是“Value 3”的另一个可选子表达式。
  • \(\s*?(.+)\s*?\)是一个左括号(\(),与找到的空格(\s*?一样多),实际内容(至少一个字符,.+),更多的空格和一个右括号。
  • \}{2}是结束的大括号,也是其中两个。

答案 1 :(得分:0)

我的方法

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