我有一个看起来像这样的字符串:
$sample = <<<EOD
lots of gibberish
before what I want{{Template
| x = 1
| y = 2|z= 3}}more gibberish
here too. {{Other|test}}
EOD;
我想摆脱胡言乱语,只是得到:
$sample = <<<EOD
{{Template
| x = 1
| y = 2|z= 3}}
EOD;
我通常会查找“{{Template”并以“}}”结尾,但我的问题是,它有时会看起来像这样:
$sample2 = <<<EOD
lots of gibberish
before what I want{{Template
| x = 1
| y = {{Convert|1|2}}|z= {{Convert|3|4}}}}more gibberish
here too. {{Other|test}}
EOD;
在这种情况下,它会打开和关闭一些curley括号,但我希望它与此匹配:
$sample2 = <<<EOD
{{Template
| x = 1
| y = {{Convert|1|2}}|z= {{Convert|3|4}}}}
EOD;
我怎么能这样做?
答案 0 :(得分:1)
\{\{Template[^\{]*(?:\{\{[^\}]*\}\}[^\{]*)*?[^\{]*\}\}
请参阅演示here
<强>解释强>
\{\{Template //Starts with {{Template
[^\{]* //Any chars except {
(?:\{\{[^\}]*\}\}[^\{]*)*? //Any inner groups+trailing chars conditional
[^\}]* //Any chars except {
\}\} //Ends with }}
答案 1 :(得分:0)
\{(.*)\}/s
这应与最外面的括号匹配,包括中间的换行符。
(\{\{Template(.*)\}\})\w+/s
这将匹配{{Template start with a}},然后是一些乱码。 “模板”部分将存储在$ 1
中