我试图在两个大括号或 Smarty 标记之间获取内容。我想只使用smarty函数获取变量,忽略if
的等等。
以下是示例字符串标记:
{{$variable|lower}}
[应该匹配]
{{$variable|escape:javascript}}
[应该匹配]
{{$variable|str_replace:"search":"replace"}}
[应该匹配]
{{if $test eq "test"}}
[应不匹配]
{{section name=foo start=10 loop=20 step=2}}
[应不匹配]
如果我这样做
preg_match_all('/{{\$?(\w+?[\W\w]*?)}}/',$str,$matches)
它将所有内容都放在括号内。
preg_match_all('/{{\$?(\w+?\W*?\w*?)}}/',$str,$matches);
这只是“变量”逃脱。
请帮助正确的正则表达式。
由于
答案 0 :(得分:0)
使用此正则表达式\{\{.*?\|.*.+?\}\}
答案 1 :(得分:0)
我可能错了,但不会简单地说:
preg_match_all('/\{\{(\$[^|]+)\|[^}]+\}\}/',$str,$matches);
诀窍,$matches[1]
将保存变量。如果文件包含回车符(windows'\ r \ n),请尝试'/\{\{(\$[^|]+)\|[^}]+\}\}/s'
,使用s
修饰符
包含以下匹配项:{{$var}}
//{{$var|foo}} {{$varbar}} bar as test string
preg_match_all('/\{\{(\$[^|}]+)(\|[^}]+|)\}\}/s',$str,$matches);
//shorter still:
preg_match_all('/\{\{(\$[^|}]+)\|?[^}]*\}\}/s',$str,$matches);
返回:
array (
0 =>
array (
0 => '{{$var|foo}}',
1 => '{{$varbar}}',
),
1 =>
array (
0 => '$var',
1 => '$varbar',
),
2 => //not in the array when using the second pattern
array (
0 => '|foo',
1 => '',
),
)