如何破译正则表达式?

How to decipher a regular expression?

preg_match_all('/({$([^}]+)})/', $result, $matches)

有人可以帮忙破译此调用中的正则表达式吗?

正则表达式不是我最好的。据我所知,它正在寻找看起来像 {$foo} 的匹配项,但我想我遗漏了什么?

在这里,我们有一个相当简单的表达式,它传递几乎所有字符,从左到 {$,从右到 }。它收集了介于两者之间的几乎所有字符:

DEMO

正则表达式

如果不需要此表达式,可以在 regex101.com 中对其进行修改或更改。例如,如果我们愿意,我们可以限制它并使特殊字符失败:

({$\w+})

DEMO

正则表达式电路

jex.im 可视化正则表达式:

演示

const regex = /({$\w+})/gm;
const str = `{$foo}
{$foo_090_}
{$foo_@#$%_5678}
{$foo_@#$%_{+[]:}`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

PHP 测试

$re = '/({$\w+})/m';
$str = '{$foo}
{$foo_090_}
{$foo_@#$%_5678}
{$foo_@#$%_{+[]:}';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
var_dump($matches);