PHP:如何从(多字节)字符串中提取所有预定义的子字符串?

时间:2018-08-19 00:21:08

标签: php string multibyte

我想将一个字符串(代表一个单词)拆分为字母和预定义的多字母序列。换句话说,我想提取预定义的子字符串,形成一个以“贪婪”方式匹配并按它们出现的顺序匹配的字符串。

例如,如果我的子字符串数组包含所有拉丁字母和波兰语二字:['ch', 'cz', 'dz', 'dź', 'dż', 'rz', 'sz'],则szczebrzeszyn将被解析为['sz', 'cz', 'e', 'b', 'rz', 'e', 'sz', 'y', 'n']

我当然可以编写一些嵌套的循环,逐个字符地进行比较,但是也许有一些创造性的,更有效的方法可以使用内置的字符串函数来获得这样的结果?如何在PHP中以高效且多字节的安全方式做到这一点?

1 个答案:

答案 0 :(得分:1)

preg_match_all('/sz|cz|\X/u', 'wszczęcie', $matches);
print_r($matches);

返回:

Array
(
    [0] => Array
        (
            [0] => w
            [1] => sz
            [2] => cz
            [3] => ę
            [4] => c
            [5] => i
            [6] => e
        )
)

所以上面的代码似乎可以完成任务。重要的一点是:子字符串按它们提供的顺序进行匹配,因此较长的子字符串应优先使用({'cz'应该在'c'之前匹配,依此类推)。 u标志对于使其多字节安全很重要。