来自字符串的 PHP token

标签 php tokenize

假设您有一个如下所示的字符串: token1 token2 tok3

并且您想获取所有标记(特别是空格之间的字符串),以及它们的位置(偏移量)和长度。

所以我想要一个看起来像这样的结果:

array(
    array(
        'value'=>'token1'
        'offset'=>0
        'length'=>6
    ),
    array(
        'value'=>'token2'
        'offset'=>7
        'length'=>6
    ),
    array(
        'value'=>'tok3'
        'offset'=>14
        'length'=>4
    ),
)

我知道这可以通过简单地循环遍历字符串的字符来完成,我可以简单地编写一个函数来完成此操作。

我想知道,PHP 是否有任何内置功能可以有效地执行此操作或至少可以帮助完成其中的一部分?

我正在寻找建议并感谢所提供的任何帮助。谢谢

最佳答案

您可以使用 preg_match_all使用 PREG_OFFSET_CAPTURE 标志:

$str = 'token1 token2 tok3';
preg_match_all('/\S+/', $str, $matches, PREG_OFFSET_CAPTURE);
var_dump($matches);

然后你只需要像这样替换 $matches[0] 中的项目:

function update($match) {
    return array( 'value' => $value[0], 'offset' => $value[1], 'length' => strlen($value[0]));
}   
array_map('update', $matches[0]);
var_dump($matches[0]);

关于来自字符串的 PHP token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4187821/

相关文章:

php - 显示特定产品类别的条款或产品属性(woocommerce)

javascript - 如何实现这段php代码

javascript - 创建 token 后,HTML5 占位符仍保留在 Tokenfield 中?

php - magento paypal 收到错误 :We're sorry, PayPal 不允许美国居民将购买的商品运送到英国

php - 检查 php 文件命令是否已经在 cron 上运行

python - 如何在标记 Keras 时忽略字符

c++ - 将字符串拆分为标记 - 没有操作系统特定的功能

c++ - 解析 double 的普通 python 列表

php 使用 preg_replace 替换点

c++ - Boost::Split 使用整个字符串作为分隔符