获取大括号之间出现的所有单词

Fra*_*sia 12 php regex

我有一个文字像:

This is a {demo} phrase made for {test}
Run Code Online (Sandbox Code Playgroud)

我需要得到

demo  
test
Run Code Online (Sandbox Code Playgroud)

注意:我的文本可以有多个块{},而不是总是两个.例:

This is a {demo} phrase made for {test} written in {English}
Run Code Online (Sandbox Code Playgroud)

我使用了这个表达式/{([^}]*)}/,preg_match但它只返回第一个单词,而不是文本中的所有单词.

Gra*_*mas 14

preg_match_all改为使用:

preg_match_all($pattern, $input, $matches);
Run Code Online (Sandbox Code Playgroud)

preg_match与以下规定大致相同:

将所有匹配的主题搜索到模式中给出的正则表达式,并按照flags指定的顺序将它们放入匹配项中.

找到第一个匹配后,后续搜索将从最后一个匹配结束后继续.


Ja͢*_*͢ck 9

您的表达式是正确的,但您应该使用它preg_match_all()来检索所有匹配项.这是一个可行的例子:

$s = 'This is a {demo} phrase made for {test}';

if (preg_match_all('/{([^}]*)}/', $s, $matches)) {
        echo join("\n", $matches[1]);
}
Run Code Online (Sandbox Code Playgroud)

要同时捕获每个匹配的位置,您可以将PREG_OFFSET_CAPTURE第四个参数传递给preg_match_all.要使用它,您可以使用以下示例:

if (preg_match_all('/{([^}]*)}/', $s, $matches, PREG_OFFSET_CAPTURE)) {
        foreach ($matches[1] as $match) {
            echo "{$match[0]} occurs at position {$match[1]}\n";
        }
}
Run Code Online (Sandbox Code Playgroud)