检测php中字符串中的字母组合

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

我有一个一定不要短的刺,它们实际上是标志/参数的集合(从产品循环生成,但这并不重要)。

说:

aaaaaaaoooooreioopppdffdssds
yxxxsasadddddaaaaddaadadadad
oppppppassaaaaawwwwwww

等等。

我需要检测这个较长的字符串中是否存在某些标志的组合。

例如:

aaaaa (5* letter a)
xyy (1*x + 2*y)
opp (1*o + 2*pp)

基本上,如果较长的刺包含 5 个字母“a”,那么陈述应该是正确的。如果只有这样的情况

yyyyaaaaaaxxxx
(包含子字符串
aaaaa
),那就真的很容易了。但问题是 5 个“a”字母可以像
yayaxayataya
一样彼此完全断开(这只是一个例子。可能有很多必需的标志组合)。

我的猜测是 preg_match 可以做到这一点 - 有人能告诉我怎么做吗?

php string search substring
1个回答
0
投票

如果您在可以使用正则表达式的环境中不需要它 - 那么我会选择

array_count_values(mb_str_split('aaaaaaaoooooreioopppdffdssds'));

这将为您提供每个字符的计数(多字节安全),因此您现在要做的就是检查结果数组,是否有您正在查找的该字符的条目,以及该计数是否等于(或更高,如果不排除这一点)您正在寻找的那个。

如果

xyy
是您需要查找的字符的“输入” - 然后也对其应用相同的两个函数,那么您会得到一个数组,该数组给您您需要查找的(最小)计数,因此您可以简单地循环它来执行测试。

function checkLetters($letters, $teststring) {
    $inputLetterCounts = array_count_values(mb_str_split($letters));
    $letterCounts = array_count_values(mb_str_split($teststring));
    foreach($inputLetterCounts as $inputLetter => $count) {
        if(!isset($letterCounts[$inputLetter]) || $letterCounts[$inputLetter] < $count) {
            return false;
        }
    }
    return true;
}
var_dump(
    checkLetters('xxy', 'aaaaaaoooooreioopppdffdssds'), // false
    checkLetters('xxy', 'aaaaxaaoyooorexoopppdffdssds'), // true
);

您想查看

<
还是
==
的计数,由您决定。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.