PHP preg_replace 大括号内的模式,但忽略方括号内的“标志”

给定以下字符串:

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

我需要只返回“变量” - 在本例中为“曲线”和“标志”,而忽略标志。

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

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

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

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

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


月关宝盒
浏览 88回答 1
1回答

阿晨1998

您可以使用\{\{(?:\s*\[[^][{}]*])?\s*(.*?)\s*\}\}请参阅正则表达式演示细节\{\{-{{子串(?:\s*\[[^][{}]*])?- 可选的非捕获组,匹配 0+ 个空格、 、 、、[之外的任何 0 个或多个字符,然后[]{}]\s*- 0+ 空格(.*?) - 第 1 组捕获除换行符之外的任何零个或多个字符,尽可能少\s*- 0+ 空格\}\}-}}子串
打开App,查看更多内容
随时随地看视频慕课网APP