使用 preg_match_all 获取变量中所有出现的字符串模式

Get all occurances of string pattern in variable using preg_match_all

我有一个变量,例如:

$str = 'a string1 ab string2 abc string3 abcd string4 abcde string1 abcdef string2';

我想 use preg_match_all 获取所有唯一出现的 string(n)

到目前为止我的代码是:

preg_match_all('%string([0-9])%', $str, $matches);

我想要的是 return $matches 数组,如下所示:

Array (
[0] => 'string1'
[1] => 'string2'
[2] => 'string3'
[3] => 'string4'
)

但是我得到了多个嵌套数组

您当前的语法没有问题,但是您获得嵌套数组的原因是因为您在 string1string2 等中的数字周围定义了一个捕获组。删除不需要的捕获组,删除重复项,您将在此处获得所需的行为。

$str = 'a string1 ab string2 abc string3 abcd string4 abcde string1 abcdef string2';
preg_match_all('/\bstring[0-9]+\b/', $str, $matches);
$strings = array_unique($matches[0]);
print_r($strings);

这会打印:

Array
(
    [0] => string1
    [1] => string2
    [2] => string3
    [3] => string4
)