Php reg exp匹配花括号内的所有内容

Php reg exp匹配花括号内的所有内容,php,regex,Php,Regex,我有这个php代码,我想匹配大括号{}中的所有内容 $sentence= "This {is|or|and} a {cat|dog|horse} for a {kid|men|women}"; preg_match("/\{.*?\}/", $sentence, $result); print_r($result); 但我只得到这个输出: Array ( [0] => {is|or|and} ) 但我需要的是这样的结果: Array ( [0] => is|or|and [1]

我有这个php代码,我想匹配大括号{}中的所有内容

$sentence= "This {is|or|and} a {cat|dog|horse} for a {kid|men|women}";
preg_match("/\{.*?\}/", $sentence, $result);
print_r($result);
但我只得到这个输出:

Array ( [0] => {is|or|and} ) 
但我需要的是这样的结果:

Array ( [0] => is|or|and
[1] => cat|dog|horse
[2] => kid|men|women
 ) 
我应该使用什么正则表达式?

改用

如果不需要支架,可以做两件事:

捕获支架内的零件,并使用
$result[1]
将其取回,就像HamZa正确建议的那样:

preg_match_all("/\{(.*?)\}/", $sentence, $result);
print_r($result[1]);
或者使用lookarounds(但是可能有点难以理解):

preg\u match\u all(“/(?改用

如果不需要支架,可以做两件事:

捕获支架内的零件,并使用
$result[1]
将其取回,就像HamZa正确建议的那样:

preg_match_all("/\{(.*?)\}/", $sentence, $result);
print_r($result[1]);
或者使用lookarounds(但是可能有点难以理解):


preg\u match\u all(“/(?您需要使用
preg\u match\u all
,是的,但是您还需要将正则表达式修改为
{(.*?)
。在原始正则表达式中,您没有对结果进行分组,因此也没有得到大括号。

您需要使用
preg\u match\u all
,是的,但是您还需要将正则表达式修改为
\{(.*)}
。在原始正则表达式中,您没有对结果进行分组,因此也没有得到大括号。

使用
preg\u match\u all

$sentence= "This {is|or|and} a {cat|dog|horse} for a {kid|men|women}";
preg_match_all("/\{[^}]+}/", $sentence, $result);
print_r($result[0]);
我会给你

Array
    (
        [0] => {is|or|and}
        [1] => {cat|dog|horse}
        [2] => {kid|men|women}
    )

使用
preg\u match\u all

$sentence= "This {is|or|and} a {cat|dog|horse} for a {kid|men|women}";
preg_match_all("/\{[^}]+}/", $sentence, $result);
print_r($result[0]);
我会给你

Array
    (
        [0] => {is|or|and}
        [1] => {cat|dog|horse}
        [2] => {kid|men|women}
    )

将您的
preg\u match
更改为
preg\u match\u all
并将
$result
更改为
$result[1]
,并稍微修改正则表达式,如下所示:

<?php
$sentence= "This {is|or|and} a {cat|dog|horse} for a {kid|men|women}";
preg_match_all("/\{(.*?)\}/", $sentence, $result);
print_r($result[1]);
?>

将您的
preg\u match
更改为
preg\u match\u all
并将
$result
更改为
$result[1]
,并稍微修改正则表达式,如下所示:

<?php
$sentence= "This {is|or|and} a {cat|dog|horse} for a {kid|men|women}";
preg_match_all("/\{(.*?)\}/", $sentence, $result);
print_r($result[1]);
?>
要获得所有结果,请使用

要执行此操作,请使用
[^}]*
而不是
*?

要去掉牙套,你可以

  • 将内容分组,如
    \{([^}]*)\}
    并从
    $matches[1]
  • 或者使用lookarounds排除大括号,如
    (?要获得所有结果,请使用

    要执行此操作,请使用
    [^}]*
    而不是
    *?

    要去掉牙套,你可以

  • 将内容分组,如
    \{([^}]*)\}
    并从
    $matches[1]


  • 或者用lookarounds排除大括号,比如
    (?可能查看preg\u match\u all?使用
    preg\u match\u all()
    谢谢大家,问题解决可能是查看preg\u match\u all?使用
    preg\u match\u all()
    谢谢大家,问题解决不要用rubular作为PHP问题的“证据”).使用PCRE,这样更合适。@m.buettner,很公平。你建立了那个网站吗?不,我没有。我只是在regex口味方面有点迂腐;)。我们鼓励人们在问regex问题时总是提到他们的regex风格,因此我们不应该给他们提供不尊重这种风格的答案。不要使用rubular作为PHP问题的“证据”。).使用PCRE,这样更合适。@m.buettner,很公平。你建立了那个网站吗?不,我没有。我只是在regex口味方面有点迂腐;)。我们鼓励人们在问正则表达式问题时总是提到他们的正则表达式风格,所以我们不应该给他们提供不尊重这种风格的答案。@Charlesrogers使用匹配组
    \{([^}]*)\}
    。你可以在
    打印($result[1]);
    @Charlesrogers使用匹配组
    \{([^}]*))\}
    。你可以在
    print\r($result[1]);
    我想你的意思是
    [^}]+
    :-)@HamZa不,我是说我在regex partI里有什么我已经做了改变:)我想你是说
    [^}+
    :-)@HamZa不,我是说我在regex partI里有什么我已经做了改变:)~他像往常一样,回答得很好。特别是对于那个不太出名的转义字符
    \K
    :)~hehe像往常一样,回答得很好。特别是对于不太为人所知的转义字符
    \K
    :)