获取括号之间的所有子字符串

问题描述 投票:0回答:5

我想提取两个字符(括号)之间的所有字符串。

$string = "blah blah blah (blorp) blah blah (bloop) blah blah (bam)";

所需输出:

['blorp', 'bloop', 'bam']

我不需要任何废话,只需要括号内的所有内容。

php preg-match-all text-extraction
5个回答
5
投票

您可以使用正则表达式来做到这一点:

$string = "blah blah blah (blorp) blah blah (bloop) blah blah (bam)";
preg_match_all("/\((.*?)\)/", $string, $result_array);

print_r( $result_array[1] ); // $result_array[0] contains the matches with the parens

这将输出:

Array
(
    [0] => blorp
    [1] => bloop
    [2] => bam
)

我的正则表达式使用非贪婪选择器:

(.*?)
,这意味着它将尽可能“少”地抓取。这可以防止它吃掉所有的
)
并抓住开头
(
和结束
)
之间的所有内容,无论多少个单词。


2
投票

您可以将 preg_match_all 与类似的东西一起使用(只是一个快速草稿......):

preg_match_all("|\([^)]+\)|", $string, $result_array);

2
投票

全部使用正则表达式,这是一个没有正则表达式的

$string = "blah blah blah (blorp) blah blah (bloop) blah blah (bam)";
$s = explode(")",$string);
foreach ( $s as $k=>$v ){
    $m= strpos($v,"(" );
    if ($m){
        print substr( $v, $m+1  )  . "\n"  ;
    }
}

1
投票

如果您想要括号中的所有内容,那么您应该使用正则表达式。对于你的情况,这会做厚:

preg_match_all('/\(.*?\)/', $string, $matches);

1
投票

http://php.net/manual/en/function.preg-match-all.php

$matches = array();
$num_matched = preg_match_all('/\((.*)\)/U', $input, $matches);
© www.soinside.com 2019 - 2024. All rights reserved.