php - PHP:如何从(多字节)字符串中提取所有预定义的子字符串?
问题描述
我想将一个字符串(代表一个单词)拆分为字母和预定义的多字母序列。换句话说,我想以“贪婪”的方式并按照它们出现的顺序从字符串中提取预定义的子字符串。
例如,如果我的子字符串数组包含所有拉丁字母加上波兰二合字母:['ch', 'cz', 'dz', 'dź', 'dż', 'rz', 'sz']
那么szczebrzeszyn
将被解析为['sz', 'cz', 'e', 'b', 'rz', 'e', 'sz', 'y', 'n']
.
当然我可以写一些嵌套循环来逐个字符比较,但也许有一些创造性和更有效的方法来使用内置的字符串函数来获得这样的结果?如何以高效且多字节安全的方式在 PHP 中执行此操作?
解决方案
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
标志对于使其多字节安全很重要。
推荐阅读
- python - 如何在 Python 中运行 shell 命令?
- tensorflow - 如何使用 tensorflow 数据集训练 sklearn 模型?
- apache-kafka - 当 min.compaction.lag.ms 大于 log.cleaner.max.compaction.lag.ms 时会发生什么?
- typescript - TypeScript:使用没有类型变量的条件类型
- swift - 如何在 swift 中将类自定义初始化程序与协调器一起使用
- linux - 当我从服务器 scp 到名称时,我的文件夹在哪里复制
- mysql - 如何检索相同数据 ID 的最大值
- r - 使用向量根据名称选择多个列表元素
- file-upload - ReactPHP --> 文件上传 --> $request->getUploadedFiles() 返回空数组
- flutter - 如何将数组 id 转换为 json Flutter 中的列表元素