PHP preg_replace 花括号内的模式,但忽略方括号内的 "flags"

PHP preg_replace pattern inside curly brackets, but ignoring "flags" inside square brackets

给定以下字符串:

Tags are inside {{ curvy }} brackets, but may also include {{ [f] flags }} in square brackets

我只需要 return“变量”——在本例中是“曲线”和“标志”,而忽略标志。

我有 2 个单独的正则表达式来实现这一点,但我需要原始字符串保持不变,所以我需要找到一种方法合并到一个找到变量但忽略标志的正则表达式中。

这是我现在拥有的两个正则表达式:

获取 {{ var }} 中的变量 --> ~\{\{\s+(.*?)\s+\}\}~

抓取标志 [f] 或 [fdc] --> ~/\[.*?\]/~

第一个正则表达式有效,但 return 变量带有标志。

您可以使用

\{\{(?:\s*\[[^][{}]*])?\s*(.*?)\s*\}\}

regex demo

详情

  • \{\{ - {{ 子字符串
  • (?:\s*\[[^][{}]*])? - 可选的非捕获组匹配 0+ 个空格,[,除 []、[=17 之外的任何 0 个或更多字符=] 和 } 然后 ]
  • \s* - 0+ 个空格
  • (.*?) - 第 1 组尽可能少地捕获换行字符以外的任何零个或多个字符
  • \s* - 0+ 个空格
  • \}\} - }} 子字符串