2011-01-20 5 views
1

私は単語の先頭にオフセットを付けると考えています。句読点のすべての記号を考慮してその単語のサイズを取得する方法が必要です。句読点を考慮してテキストから単語を抽出します

例:

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

今私はハローが5つの文字で考えると5を返す関数を必要としています。

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

は、私はいくつかのハード解析を行うことができますが、私は

+3

うーん。 "hello"は5文字です。 – dkarp

+0

fixd ........... –

答えて

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 
+0

うわー、私はそれがもっと簡単だと思った。ありがとう – dynamic

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]を適応よりエレガントな何かを書きたいと思います:

この

は句読点のいくつかが発生する可能性があります文字(私はあなたの句読法の問題を得ていませんでした)

+0

私は[a-z]をeaslyに適応させることはできません。様々な国際的な言語のすべてのアクセント付きの単語を考慮してください。 – dynamic

関連する問題