php单独的文字,但体贴的逗号作为单词

时间:2017-04-22 10:11:31

标签: php arrays explode comma

我想获得本文的每一个字,但需要在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

3 个答案:

答案 0 :(得分:1)

您可以使用空格+逗号+空格替换逗号',' - > ' ,'

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

答案 1 :(得分: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);

答案 2 :(得分: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]类似。