我有一个字符串,我需要找到其中一些子串的所有出现,但我只知道子串的首字母字符... ... 我可以做什么?
例子:我知道所有的子串都是以字母开头的,但是我只知道子串的首字符,我可以怎么做?
$my_string = "This is a text cointaining [substring_aaa attr], [substring_bbb attr] and [substring], [substring], [substring] and I'll try to find them!";
我知道所有的子串都是以 '[子串' 并以空格符(attr前)或 ']' char,所以在这个例子中,我需要找到 substring_aaa, substring_bbb 和 子串 并计算其中每一个的出现次数。
结果将是一个以子串为键,以出现次数为值的关联数组,例如:我有一个字符串,我需要找到其中一些子串的所有出现次数,但我只知道子串的首字母字符。
$result = array(
'substring' => 3,
'substring_aaa' => 1,
'substring_bbb' => 1
)
匹配 [substring
然后不 ]
0次或更多次,然后是 ]
:
preg_match_all('/\[(substring[^\]]*)\]/', $my_string, $matches);
$matches[1]
会产生。
Array
(
[0] => substring_aaa attr
[1] => substring_bbb attr
[2] => substring
[3] => substring
[4] => substring
)
然后你就可以计算这些值。
$result = array_count_values($matches[1]);
在重读问题之后,如果你不想要空格后面的内容(本例中是attr),那么:
preg_match_all('/\[(substring[^\]\s]*)[\]\s]/', $my_string, $matches);
对于其中的 $matches[1]
会产生。
Array
(
[0] => substring_aaa
[1] => substring_bbb
[2] => substring
[3] => substring
[4] => substring
)
随着 array_count_values
屈服。
Array
(
[substring_aaa] => 1
[substring_bbb] => 1
[substring] => 3
)