如何匹配左右分隔符的字符串?

ran*_*425 1 php regex preg-match

我有以下字符串:

$string = '{(|Teste 1|)}{(|Teste_2|)}{(|3 3 3 3|)}';
Run Code Online (Sandbox Code Playgroud)

我想提取{(||)}之间的每个子字符串.

我尝试着:

$string = '{(|Teste 1|)}{(|Teste_2|)}{(|3 3 3 3|)}';
preg_match('/([^{\(\|])(.*)([^\|\)}])/', $string, $matches);

echo '<pre>';
print_r($matches);
echo '</pre>';
die();
Run Code Online (Sandbox Code Playgroud)

输出:

Array
(
    [0] => Teste 1|)}{(|Teste_2|)}{(|3 3 3 3
    [1] => T
    [2] => este 1|)}{(|Teste_2|)}{(|3 3 3 
    [3] => 3
)
Run Code Online (Sandbox Code Playgroud)

期望的输出:

Array
(
    [0] => Teste 1
    [1] => Teste_2
    [2] => 3 3 3 
)
Run Code Online (Sandbox Code Playgroud)

我怎样才能完成这个结果?
THKS!

hwn*_*wnd 5

您的正则表达式语法不正确,而您想要使用preg_match_all().

$str = '{(|Teste 1|)}{(|Teste_2|)}{(|3 3 3 3|)}';
preg_match_all('/{\(\|([^|]*)\|\)}/', $str, $matches);
print_r($matches[1]);
Run Code Online (Sandbox Code Playgroud)

输出:

Array
(
    [0] => Teste 1
    [1] => Teste_2
    [2] => 3 3 3 3
)
Run Code Online (Sandbox Code Playgroud)