2014-09-22 67 views
0

我使用PHP具有下列字符串:智能字換行?

$message = 'hello, DavidPalmerUgroImmIErogandTagroChechiken ho are you?'; 

我要拆分的word如果字符串的任何字長然後15 characters。我怎樣才能做到這一點?

我搜索並找到了分裂WHOLE字符串的答案,但不僅僅是分裂一個WORD,如果該特定單詞超過15個字符長。請幫忙!

+0

你想如何拆分?在兩者之間添加空格或添加超級? – 2014-09-22 12:15:24

+0

只是想在兩個SPLITTED單詞之間使用空格(分割一個LONG單詞後) – user2854563 2014-09-22 12:16:10

回答

3

你也可以嘗試這樣的事情。

$newMessage = preg_replace('/(\S{15})(?=\S)/', '$1 ', $message); 
+1

你是正則表達式GEEk:P這是一個很好的選擇。謝謝Sharma – user2854563 2014-09-22 12:28:53

+1

我很高興它適合你:) – 2014-09-22 12:29:39

3

這是一個相對基本解決,有事情可以改善(更好的詞檢測,將14封則中斷的話連字符等),但是這應該給你一個很好的起點。

:對於課程只是馬:-)


分割字符串成單詞 -

您也可以與正則表達式做到這一點(/[^\s]{15,}/作爲基本出發點),如果你感到滿意的是

$words = explode(' ', $message); // could also split on other punctuation or detect words more reliably here 

迭代的話,看看是否有任何> 15個字母

foreach ($words AS $key => $word) { 
    if (strlen($word) > 15) { 
     // ... 
    } 
} 

然後當你找到一個,把它切成更小的部分

$words[$key] = implode(' ', str_split($word, 15)); 

最後,加入它所有備份。

$words = implode(' ', $words); 

完整代碼:

$words = explode(' ', $message); // could also split on other punctuation or detect words more reliably here 

foreach ($words AS $key => $word) { 
    if (strlen($word) > 15) { 
     $words[$key] = implode(' ', str_split($word, 15)); 
    } 
} 

$words = implode(' ', $words); 
+0

如果字符串有三個連續空格,這個工作是否會起作用? 'hello worldasdfasdfasdfasdf werwerwerwer' – 2014-09-22 12:17:59

+4

是的,數組條目將是一個空字符串(''''),將會失敗'> 15',因此只會被放回輸出爲3個空格 – Joe 2014-09-22 12:19:09

+0

此外,字符串不應該有多個連續的空格,如果是正常的文字。 – 2014-09-22 12:22:11

0

$length = strlen($yourword); 

那麼只要讓你的字的大小,如果多數民衆贊成比15大時,可以使用chunksplit給它分開更小的塊。

+0

問題是,如果它大於15個字符,我怎麼才能找到WORD? – user2854563 2014-09-22 12:19:50