考虑到我有一个标记单词开头的偏移量。我需要一种方法来考虑标点符号的所有符号来获取该单词的大小。
示例:
$str = "my text bla bla-bla; hello! abc";
$offset = "22"; // start of hello
现在我需要一个返回5的函数,考虑到hello是5个字符。
这可能会出现一些标点:
array(',','.',' ','-',"'",'"',';',':','?','!','|','/','\\','<','>')
我可以做一些硬解析,但我想写一些更优雅的东西
答案 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]
调整为您认为是角色的角色范围(我没有完全解决您的标点问题)