考虑标点符号从文本中提取单词

时间:2011-01-20 01:56:13

标签: php

考虑到我有一个标记单词开头的偏移量。我需要一种方法来考虑标点符号的所有符号来获取该单词的大小。

示例:

$str = "my text bla bla-bla; hello! abc";
$offset = "22";  // start of hello

现在我需要一个返回5的函数,考虑到hello是5个字符。

这可能会出现一些标点:

array(',','.',' ','-',"'",'"',';',':','?','!','|','/','\\','<','>')

我可以做一些硬解析,但我想写一些更优雅的东西

2 个答案:

答案 0 :(得分:1)

这可以帮到你:

function getWordSize($string, $offset = 0)
{
    $word = array();

    if (preg_match('~.{' . max(0, intval($offset)) . '}(\p{L}+)~u', $string, $word) > 0)
    {
        if (array_key_exists(1, $word) === true)
        {
            return strlen($word[1]); // bytes, or
            return strlen(utf8_decode($word[1])); // unicode chars
        }
    }

    return 0;
}

用法:

echo getWordSize('my text bla bla-bla; hello! abc', 21); // 5

但是这不能处理在中间切换单词的偏移量,所以:

echo getWordSize('my text bla bla-bla; hello! abc', 23); // 3

答案 1 :(得分:0)

$str = "my text bla bla-bla; hello! abc";
$offset = "22";  // start of hello

$chopped = substr($str,$offset);
preg_match("/[a-z]+/i",$chopped,$match);

$length = strlen($match[0]);

[a-z]调整为您认为是角色的角色范围(我没有完全解决您的标点问题)