【问题标题】:Find all occurrences of a "unknown" substring in a string with PHP使用 PHP 查找字符串中所有出现的“未知”子字符串
【发布时间】:2020-05-12 14:30:46
【问题描述】:

我有一个字符串,我需要在其中找到所有出现的某些子字符串,但我只知道子字符串的首字母字符...我能做什么?

例子:

$my_string = "This is a text cointaining [substring_aaa attr], [substring_bbb attr] and [substring], [substring], [substring] and I'll try to find them!";

我知道所有子字符串都以 '[substring' 开头并以空格字符(在 attr 之前)或 ']' 字符结尾,所以在这个例子中我需要找到 substring_aaasubstring_bbbsubstring 并计算它们各自出现的次数。

结果将是一个关联数组,其中子字符串作为键,出现次数作为值,例如:

$result = array(
    'substring' => 3,
    'substring_aaa' => 1,
    'substring_bbb' => 1
)

【问题讨论】:

  • 你放弃了吗?

标签: php substring find-occurrences


【解决方案1】:

匹配[substring,然后不匹配] 零次或多次,然后匹配]

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
    )

【讨论】:

    猜你喜欢
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    相关资源
    最近更新 更多