【问题标题】:PHP explode string by dot if the next character is a space or an uppercase alphabetic character如果下一个字符是空格或大写字母字符,PHP 按点分解字符串
【发布时间】:2019-05-13 12:40:34
【问题描述】:

我有一段看起来像这样:

Lorem Ipsum 只是(不是1.2%)印刷排版的虚拟文本 工业y。 Lorem Ipsum 一直是业界标准的虚拟文本 自 1500 年代以来,当一位不知名的印刷商采用了一种类型的厨房和 将其加扰以制作类型标本 book。我不仅活了下来 五个世纪,也是电子排版的飞跃, 基本上保持不变。 It 在 1960 年代普及

我想在短语中将其拆分为以点 . 结尾的短语,但前提是该点位于短语的末尾,而不是在中间(如 1.2%)并且有 UPPERCASE它后面的字符(也可能是一个空格)。例如,如果我使用:

$arr = explode('.', $paragraph);

它会在每次出现 . 时拆分该段落。

有没有一种快速而干净的方法来获得它?如果是,有人可以帮我理解吗?

【问题讨论】:

  • 不应该只是$arr = explode('. ', $paragraph); 工作吗? (在点后添加一个空格)。但是,它可能会导致语法错误的文本,因为一个段落可以由多个句子组成。自动正确执行可能需要某种 AI 或广泛的规则引擎。
  • 我赞同explode(". ", $paragraph); 的想法。这是迄今为止最简单的。由于目标是从段落中提取句子,无论“停止/句号”如何,这是实现目标的最简单最快的方法。正则表达式可能更高效,运行速度更快(可能在很长的段落上很明显),但就“高尔夫代码”而言,这个胜出

标签: php string explode


【解决方案1】:

使用preg_split('/\.[\s|$]/', $input_line);

这将在点和空格或换行处分割。

https://www.phpliveregex.com/p/qiC
https://3v4l.org/FOaHu

【讨论】:

  • explode ...如果下一个字符是空格或大写,但您没有注意它。您的代码也匹配字符串末尾的最后一个点
  • @Mohammad 是否有大写字符无关紧要。 OP 认为正确的方法并不总是正确的。去了解方轮。
  • Hei @Andreas,感谢您抽出宝贵时间帮助我,我真的很感激,但我已经使用了您之前的评论答案和 Mohammad 的答案:(
【解决方案2】:

使用正则表达式匹配大写字符或空格之前的点,并使用preg_split()根据正则表达式匹配拆分字符串。

$arr = preg_split("/\.\s?(?=[A-Z])/", $paragraph);

检查结果在demo

【讨论】:

  • 对我来说太快了,但我正要回答 /\.\s?(?=[A-Z])/ 而不是..
  • @Kaddath 你是对的,它会导致从第一个项目中删除额外的空间
  • 第 1 项有一个新行。
  • 谢谢谢谢谢谢! :D 效果很好
  • @emma Yes也删除新行
猜你喜欢
  • 2011-10-18
  • 1970-01-01
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 2023-02-23
  • 2023-03-26
  • 1970-01-01
  • 2013-06-11
相关资源
最近更新 更多