-2

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

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

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

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

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

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

2 回答 2

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}是右花括号,也正好是其中的两个。
于 2012-04-09T10:48:15.310 回答
0

我的方法

/\{\{[\s\W]*((\w+)([\s\W]*\|[\s\W]*([\w]+)([\s\W]*\([\s\W]*(\w+)[\s\W]*\)[\s\W]*){0,1}){0,1})[\s\W]*\}\}/
于 2012-04-09T10:52:50.703 回答