我有一个文字像:
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指定的顺序将它们放入匹配项中.
找到第一个匹配后,后续搜索将从最后一个匹配结束后继续.
您的表达式是正确的,但您应该使用它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)