使用 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'
)
但是我得到了多个嵌套数组
您当前的语法没有问题,但是您获得嵌套数组的原因是因为您在 string1
、string2
等中的数字周围定义了一个捕获组。删除不需要的捕获组,删除重复项,您将在此处获得所需的行为。
$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
)
我有一个变量,例如:
$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'
)
但是我得到了多个嵌套数组
您当前的语法没有问题,但是您获得嵌套数组的原因是因为您在 string1
、string2
等中的数字周围定义了一个捕获组。删除不需要的捕获组,删除重复项,您将在此处获得所需的行为。
$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
)