php - 每 10 个单词拆分字符串

标签 php regex split

我想每 10 个单词拆分一个字符串。 但如果任何单词包含标点符号,则在标点符号之后拆分并继续每 10 个单词拆分。

我正在使用它,但它只是将字符串每 10 个单词拆分一次。

<?php

$string = 'Lorem ipsum dolor sit amet, te has omnesque gubergren definiebas. Omnesque ullamcorper pri ut. In eos insolens atomorum moderatius, mundi menandri usu cu. Nam an dicant tritani philosophia facete minimum id sed errem omnium persequeris ad his, omnes luptatum recteque mel eu, est te laudem causae.';

$splitted = preg_replace( '~((?:\S*?\s){10})~', "$1\n", $string);

$Words = explode("\n", $splitted);

var_dump($Words);

?>
array(5) {
  [0]=>
  string(66) "Lorem ipsum dolor sit amet, te has omnesque gubergren definiebas. "
  [1]=>
  string(72) "Omnesque ullamcorper pri ut. In eos insolens atomorum moderatius, mundi "
  [2]=>
  string(66) "menandri usu cu. Nam an dicant tritani philosophia facete minimum "
  [3]=>
  string(64) "id sed errem omnium persequeris ad his, omnes luptatum recteque "
  [4]=>
  string(29) "mel eu, est te laudem causae."
}

我想得到这些结果,每 10 个单词拆分字符串 但是如果任何单词包含标点符号,在标点符号之后拆分并继续每 10 个单词拆分

array(6) {
  [0]=>
  string() "Lorem ipsum dolor sit amet, te has omnesque gubergren definiebas. "
  [1]=>
  string() "Omnesque ullamcorper pri ut."
  [2]=>
  string() "In eos insolens atomorum moderatius, mundi  menandri usu cu."
  [3]=>
  string() "Nam an dicant tritani philosophia facete minimum id sed errem"
  [4]=>
  string() "omnium persequeris ad his, omnes luptatum recteque mel eu, est"
  [5]=>
  string() "te laudem causae."
}

最佳答案

这是你想要的吗?

$string = 'Lorem ipsum dolor sit amet, te has omnesque gubergren definiebas. Omnesque ullamcorper pri ut. In eos insolens atomorum moderatius, mundi menandri usu cu. Nam an dicant tritani philosophia facete minimum id sed errem omnium persequeris ad his, omnes luptatum recteque mel eu, est te laudem causae.';
$splitted = preg_replace( '~((?:[^\s\pP]+[\s\pP]){1,10})~', "$1\n", $string);
$Words = explode("\n", $splitted);
var_dump($Words);

\pP 代表任何标点符号。

输出:

array(10) {
  [0]=>
  string(27) "Lorem ipsum dolor sit amet,"
  [1]=>
  string(38) " te has omnesque gubergren definiebas."
  [2]=>
  string(29) " Omnesque ullamcorper pri ut."
  [3]=>
  string(37) " In eos insolens atomorum moderatius,"
  [4]=>
  string(23) " mundi menandri usu cu."
  [5]=>
  string(63) " Nam an dicant tritani philosophia facete minimum id sed errem "
  [6]=>
  string(26) "omnium persequeris ad his,"
  [7]=>
  string(32) " omnes luptatum recteque mel eu,"
  [8]=>
  string(22) " est te laudem causae."
  [9]=>
  string(0) ""
}

如果你不想用逗号分隔,使用这个:

$splitted = preg_replace( '~((?:[^\s.:;]+[\s.:;]){1,10})~', "$1\n", $string);

关于php - 每 10 个单词拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32477510/

相关文章:

java - 没有 csv 的 split() 方法

PHP 检测低于版本 10 的 Internet Explorer

php - 为什么 iconv 在 php :7. 4-fpm-alpine docker 中返回空字符串

java - 正则表达式标记日志行

javascript - 扩展正则表达式

regex - 为什么在此正则表达式替换中丢失引号转义?

python - 为什么我不能在 pandas 中将列分成两列?

python - 如何使用拆分或正则表达式从 python 中的字符串获取子字符串

php - Swift4 JSONDecoderExpected 解码 Dictionary<String, Any> 但找到了一个数组

php - PHP 中的 Mysql 空查询 - 我得到了什么?资源编号?