2009-08-26 4 views
6

나는 다음과 같은 문장이 있다고 할 수 있습니다. 이는 같은 날 떠날 수 있습니다PHP 문자열/워드 프로세싱 질문

A quick brown fox jum 

그러나, 그 문장이 어떤 문법 이해가되지 않습니다, 그래서 25 문자 제한에 머무시는 동안 우리가 허용 할 수있는 마지막 단어를 찾기 위해 선호하는 것입니다. 그러나 그것은 더 문법적인 의미가 있습니다, 25 문자 제한보다 적을 것이다

A quick brown fox 

이 우리에게 뭔가를 줄 것이다. 즉 단어가 깨지지 않았기 때문에 한도에 머물러있는 동안 이해할 수있는 최대 단어 수가 있습니다.

문자열을 취할 함수와 25와 같은 char 제한을 코딩하는 방법과 문자열이 제한을 초과하면 가능한 최대 단어 수의 문자열을 반환합니까?

+0

"빠른 갈색 여우 JUM는"만 24 문자 "빠른 갈색 여우 뛰어"동안 만 21 자, 그렇다면 당신은 25 글자 제한이 있습니다. 적절한 대답은 "빠른 갈색 여우가 뛰어"가 아니겠습니까? – Kibbee

+0

예가 고안되었습니다. 분명히 – moo

답변

12

그것은 충분히 정규식 사용하여 쉽게 :이 구현의

function first_few_words($text, $limit) { 
    // grab one extra letter - it might be a space 
    $text = substr($text, 0, $limit + 1); 
    // take off non-word characters + part of word at end 
    $text = preg_replace('/[^a-z0-9_\-]+[a-z0-9_\-]*\z/i', '', $text); 
    return $text; 
} 

echo first_few_words("The quick brown fox jumps over the lazy dog", 25); 

일부 추가 기능 : 또한 바꿈과 탭에서

  • 분할 단어. '-'로 간주되는 단어 문자 변경된 정규식 그래서 문자, 숫자, '_'과 :
  • 문자 25

편집에서 끝 여분의 단어를 저장합니다.

+1

+1 더 실용적인 것입니다. – karim79

+0

멀티 바이트 안전을 위해'mb_substr'을 사용하는 것이 더 좋습니다 –

+0

'?, .-'와 같은 구두점 항목도 단어 분리 문자로 간주 될 수 있습니까? –

0

이 기능을 사용해보십시오. 나는 PHP 사이트에서 아이디어를 가져 와서 내 필요에 맞게 조정했습니다. 문자열의 "머리"와 "꼬리"를 가져 와서 단어를 고려한 문자열을 주어진 길이로 줄입니다. 필요에 따라 기능의 모든 "꼬리"부분을 스트라이핑하는 것이 좋습니다.

function strMiddleReduceWordSensitive ($string, $max = 50, $rep = ' [...] ') { 
$string=nl2space(utf8decode($string)); 
$strlen = mb_strlen ($string); 

if ($strlen <= $max) 
    return $string; 

$lengthtokeep = $max - mb_strlen($rep); 
$start = 0; 
$end = 0; 

if (($lengthtokeep % 2) == 0) { 
    $length = $lengthtokeep/2; 
    $end = $start; 
} else { 
    $length = intval($lengthtokeep/2); 
    $end = $start + 1; 
} 
$tempHead = mb_strcut($string, 0, $length); 
$headEnd = strrpos($tempHead, ' ')+1; 
$head = trim(mb_strcut($tempHead, 0, $headEnd)); 

$tempTail = mb_strcut($string, -$length); 
$tailStart = strpos($tempTail, ' ')+1; 
$tail = trim(mb_strcut($tempTail, $tailStart)); 
//p($head); 
//p($tail); 
return $head . $rep . $tail; 

}

+1

이 넌센스는 무엇입니까? – moo

2
<?php 
    function wordwrap_explode($str, $chars) 
    { 
     $code = '@@@'; 
     return array_shift(explode($code, wordwrap($str, $chars, $code))); 
    } 
    echo wordwrap_explode('A quick brown fox jumped over a lazy dog.', 25); 
?> 

출력 :

A quick brown fox jumped 
+1

''explode (...) '에 대한 첫 번째 인수로'$ code'를 사용하려고 한 것 같습니까? –

+0

yap, thanks .... – inakiabt