擅长:python、mysql、java
<p>如果使用PHP,可以使用以下模式:</p>
<pre><code>~{[^}]*+}(*SKIP)(*FAIL)|%\w++%~i
</code></pre>
<p>示例:</p>
^{pr2}$
<p>如果使用Python,则可以使用一个捕获组执行相同的操作(即:在前面匹配花括号中的内容,然后搜索要查找的内容):</p>
<pre><code>import re
mystr = r'%album_artist%/%album%{ (%year%)}/{%track_number%. }%track_artist% - %title%';
print filter(bool, re.findall(r'{[^}]*|(?i)%(\w+)%', mystr))
</code></pre>
<p>通知:</p>
<p>您可以尝试另一种模式,它将在左大括号后的最后一个<code>%</code>停止匹配(不能确定它比第一个快):</p>
<pre><code>print filter(bool, re.findall(r'{(?:[^}%]*%)*|(?i)%(\w+)%', mystr))
</code></pre>