【问题标题】:PHP split sentence to sections by array of valuesPHP按值数组将句子拆分为部分
【发布时间】:2014-05-17 14:46:35
【问题描述】:

我正在寻找执行此操作的最佳方法...是否存在一些方便的正则表达式?或者我应该以某种方式逐节循环播放它?

好吧,我有这么一句话:

"The rooms rooms and rooms again were great, the food was not but the beds were extremely comfortable."

我有一个项目数组(分隔符):

 array('food','room','bed');

如果可以理解的话,我想以某种方式神奇地获得这些单词之间的句子部分......就像将它分割(从一个分隔符到另一个分隔符)......

第一节:

"The"

第二部分(直到数组中最近的项目(分隔符):

"rooms "

第三部分:

"rooms and "

第四节:

"rooms again were great, the"

还有第五部分:

"food was not but the ".

第四节:

"beds were extremely comfortable."

基本上将句子从一个关键字重复拆分到另一个关键字。

分隔符的意义在于分割句子......所以只需匹配它......如果句子中有一个单词“rooms”,它匹配分隔符“room”。复数不重要,关键是根据分隔符(数组中的项目)将句子分成多个部分。

有什么想法吗?

【问题讨论】:

  • 数组是否总是两个单词,或者可能更多?
  • 迈克尔还有更多的话。
  • 如果有3个或更多,如何分隔?现在,您拥有直到第一个单词(包括第一个单词)、介于两者之间的所有内容以及从第二个单词开始到结尾的所有内容。如果有第三个,它会匹配它的开头还是结尾?请发布一个使用 3 个单词会发生什么情况的示例。
  • “房间”这个词中的 s 怎么样?您在原始句子中有它,但在示例和分隔符数组中没有
  • Michael 和 Marcin 感谢您的关注。请更新我的问题。

标签: php regex split


【解决方案1】:

可以使用lookahead进行拆分:

$pattern = '/(?=room|food|bed)/i';

$str = "The rooms rooms and rooms again were great, the food was not but the beds were extremely comfortable.";

print_r(preg_split($pattern, $str));

输出 (test @ eval.in)

Array
(
    [0] => The 
    [1] => rooms 
    [2] => rooms and 
    [3] => rooms again were great, the 
    [4] => food was not but the 
    [5] => beds were extremely comfortable.
)

使用i (PCRE_CASELESS)modifier。可能需要在某些单词中添加\b word-boundaries

另见:test at regex101regex faq

【讨论】:

  • 似乎这正是我所需要的,我会稍微确定一下,然后我会将其标记为答案。现在谢谢约翰尼!
  • @Trki 欢迎!另请参阅this example @ eval.in 与您的阵列。如果单词中包含regex metacharcters,则需要preg_quote的项。
  • 喜欢零宽度分割,+1 :)
  • @Jonny5 有什么办法可以选择整个单词吗?示例:$pattern = '/(?=room|food|bed)/i'; $string = "卧室很棒。" Split -> [0] => the, [1] => 卧室很棒。 ?
  • 啊啊我一直在使用错误的语法,这就是为什么它对我不起作用。再次感谢!你是最棒的:)
猜你喜欢
  • 2017-01-29
  • 2013-07-13
  • 1970-01-01
  • 2019-09-22
  • 1970-01-01
  • 1970-01-01
  • 2013-10-20
  • 2011-06-15
  • 1970-01-01
相关资源
最近更新 更多