2017-04-22 36 views
0

我想獲得這個文本中的每個字,但需要體貼逗號作爲單獨的詞,在PHP中:PHP單獨的文本,但體貼逗號作爲字

我輸入文本:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. 

我想數組:

array[0] => "Lorem" 
array[1] => "ipsum" 
array[2] => "dolor" 
array[3] => "sit" 
array[4] => "amet" 
array[5] => "," 
array[6] => "consectetuer" 
array[7] => "adipiscing" 
array[8] => "elit" 
array[9] => "." 

什麼我得到explode(" ", $text)是:

array[0] => "Lorem" 
array[1] => "ipsum" 
array[2] => "dolor" 
array[3] => "sit" 
array[4] => "amet," 
array[5] => "consectetuer" 
array[6] => "adipiscing" 
array[7] => "elit." 

你能幫我嗎? TIA

+0

使用'preg_match_all(「/ \ w + |,| \ ./」,$ str,$ matches)' – Mohammad

+0

@Mohammad https://meta.stackexchange.com/questions/230676/hey-you-yeah-you -post-your-answers-as-answers-not-comments評論將被用於要求澄清或OP中的其他細節。請不要回覆評論(並請刪除您評論的答案)。 – mickmackusa

回答

1

你可以替換使用空格+逗號+空格 '' 逗號 - > ''

$newSentence = str_replace("," , " , " , $theSentence); 
$arr = preg_split('/[\s]+/', $newSentence); 
+0

不知道你對數據做了什麼,但厭倦了換行符和其他格式,可能會混淆你的數組和用途。第一種方法可能會給你一個空間的數組元素。使用第二種方法。 – Vbudo

0

嘗試以下,

preg_match_all('/([\w]+)([\,\.])?/', "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.",$match); 

$arr = array_merge($match[1],array_filter($match[2])); 
print_r($arr); 
0

您應該使用preg_match_all()沒有任何捕獲爲了獲得最佳效率,可以使用組或變量。

代碼:(Demo

$string='Lorem ipsum dolor sit amet, consectetuer adipiscing elit.'; 
var_export(preg_match_all('/[a-z]+|\S/i',$string,$out)?$out[0]:'fail'); 

輸出:

array (
    0 => 'Lorem', 
    1 => 'ipsum', 
    2 => 'dolor', 
    3 => 'sit', 
    4 => 'amet', 
    5 => ',', 
    6 => 'consectetuer', 
    7 => 'adipiscing', 
    8 => 'elit', 
    9 => '.', 
) 

\w可以用來匹配a-zA-Z0-9_但是你的樣品中只有字母存在。

如果您包含撇號,則可以使用$pattern='/[a-z\']+|\S/i',但未來的調整是您做出的決定。

第二種選擇中的\S是任何非空白字符 - 它收集第一個選項允許通過的所有標點字符(一次一個)。

圖案上的i標誌指示[a-z]將像[A-Za-z]一樣行事。

+0

@locobastos您是否看到我的高效單功能解決方案?這是一個專業級的解決方案。 – mickmackusa

相關問題