我尝试使所有值与/{ any string not contain "/" and "{" and "}" inside }/
匹配
我的伙伴\/\{((?!\/).)*\}\/
我的测试字符串/a/{bb}/{d{b}}/{as}df}/b{cb}/a{sdfas/dsgf}
但是我的结果
array(2
=> array(2
=> /{bb}/
=> /{as}df}/
)
=> array(2
=> b
=> f
)
)
我只希望结果是/{bb}/
,价值是bb
,谢谢。
答案 0 :(得分:1)
您可以尝试与此伴侣
(?<=\/){[^\/{}]*?}(?=\/)
说明
(?<=\/)
-积极回望。匹配/
{
-匹配{
。[^\/{}]*?
-匹配除{
和}
和/
以外的所有零个或多个时间(惰性模式)。(?=\/)
-匹配/
。您也可以\/({[^\/{}]*?})\/
答案 1 :(得分:1)
答案 2 :(得分:0)
为了确保分隔斜线之间的整个子字符串是一个用花括号包裹的单独值,我建议您检查一下:
懒惰匹配在模式中不是必需的/有益的,因为否定的字符类将防止“过度匹配”的可能性。
鳕鱼:(Demo)
$string = '/a/{bb}/{d{b}}/{as}df}/b{cb}/a{sdfas/dsgf}';
var_export(
preg_match(
'~(?:^|/){([^{}/]*)}(?:/|$)~',
$string,
$out
)
? $out
: 'no match'
);
输出:
array (
0 => '/{bb}/', // the fullstring match
1 => 'bb', // capture group 1
)