如何从这段摘录中的特定单词的文本中获取一些单词?

时间:2017-06-26 17:20:57

标签: php

(让我们有一个良好的开端:我很抱歉我的英语不好。)

我正在使用Php5 +。

这就是事情:我试图从一个特定单词周围的长文本中获取5或6个字长的摘录(提取?)。

使用以下文字:

Hello my name is Bryan, I am in the kitchen but I do love umbrellas and cats. I'm not a dog person.

如果我的目标是“厨房”这个词,我想获得:

"[...] in the kitchen but I do [...]"

我想我必须使用正则表达式和东西,但说实话我不知道该怎么做。

并且在更难的方式中,我希望得到与文本中遇到的单词一样多的摘录。

你的建议。

2 个答案:

答案 0 :(得分:2)

我猜你正在寻找类似的东西:

<?php
$subject = "Hello my name is Bryan, I am in the kitchen but I do love umbrellas and cats. I'm not a dog person.";
$pattern = '/\w+\s+\w+\s+kitchen\s+\w+\s+\w+\s+\w+/';
preg_match($pattern, $subject, $tokens);
var_dump('[...] ' . $tokens[0] . ' [...]');

输出显然是:

string(35) "[...] in the kitchen but I do [...]"

答案 1 :(得分:0)

对于你的建议人员,我找到了解决方案。

我使用了正则表达式,因为split/explode是有限的(你可以只用一个字符分割,有时你想要这个字符,所以即使preg_split也不好)

因为我想找到特定的单词,即使它在一行的开头/结尾,在其他单词之间或在一个句子的开头/结尾等,我做了这个正则表达式:

((?:[\p{L}.,?!;:]+ +){1,3}|\b)(kitchen)((?:[ ',]+[\p{L}.,?!;:']+){1,3}|\b)

如果你有更好的,请告诉我。如果您对此有疑问,请问我!

(见https://regex101.com/r/e69l2m/1