首页 > 解决方案 > PHP:如何从(多字节)字符串中提取所有预定义的子字符串?

问题描述

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

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

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

标签: phpstringmultibyte

解决方案


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标志对于使其多字节安全很重要。


推荐阅读