我有以下字符串:
$string = '{(|Teste 1|)}{(|Teste_2|)}{(|3 3 3 3|)}';
我想提取 {(| 和 |)} 之间的每个子字符串。
我正在尝试:
$string = '{(|Teste 1|)}{(|Teste_2|)}{(|3 3 3 3|)}';
preg_match('/([^{\(\|])(.*)([^\|\)}])/', $string, $matches);
echo '<pre>';
print_r($matches);
echo '</pre>';
die();
输出:
Array
(
[0] => Teste 1|)}{(|Teste_2|)}{(|3 3 3 3
[1] => T
[2] => este 1|)}{(|Teste_2|)}{(|3 3 3
[3] => 3
)
期望的输出:
Array
(
[0] => Teste 1
[1] => Teste_2
[2] => 3 3 3
)
如何完成此结果?
THKS!
答案 0 :(得分:5)
您的正则表达式语法不正确,您想要使用preg_match_all()
。
$str = '{(|Teste 1|)}{(|Teste_2|)}{(|3 3 3 3|)}';
preg_match_all('/{\(\|([^|]*)\|\)}/', $str, $matches);
print_r($matches[1]);
输出:
Array
(
[0] => Teste 1
[1] => Teste_2
[2] => 3 3 3 3
)
答案 1 :(得分:2)
这是使用str_replace
$string = '{(|Teste 1|)}{(|Teste_2|)}{(|3 3 3 3|)}';
$array = explode("|)}",str_replace("{(|","",$string));
print_r(array_slice($array,0, -1));
不是最好的方法,但你可以记住。
答案 2 :(得分:2)
你可以尝试下面的代码
<?php
$string = '{(|Teste 1|)}{(|Teste_2|)}{(|3 3 3 3|)}';
preg_match('/{\(\|(.*?)\|\)}{\(\|(.*?)\|\)}{\(\|(.*?)\|\)}/', $string, $matches);
preg_match_all('/{\(\|(.*?)\|\)}/', $string, $matches_all);
echo '<pre>';
print_r($matches);
print_r($matches_all);
echo '</pre>';
答案 3 :(得分:1)
您可以使用Lookaround
来匹配所需的输出:
$string = '{(|Teste 1|)}{(|Teste_2|)}{(|3 3 3 3|)}';
preg_match_all('/(?<=\{\(\|).*?(?=\|\)\})/', $string, $matches);
print_r($matches[0]);
正则表达式演示:https://regex101.com/r/95wUo8/1
输出:
Array
(
[0] => Teste 1
[1] => Teste_2
[2] => 3 3 3
)