Php 从文本中提取特定信息

Php 从文本中提取特定信息,php,regex,text,Php,Regex,Text,我有一个字符串: 他在家里感到有点冷,就问店员:“怎么了?” 里面的温度?”他认为系统会 从他窝里的恒温器测得的温度并报告给他 他相反,谷歌助手去拿了天气报告 例如,土耳其的一个度假小镇 这是我获取所有大写单词的函数: public static function getUpperCase($str) { preg_match_all('/\b[A-Z][a-zA-Z]*\b/', $str, $matches); return $matches[0]; } 我的输出是: 1:

我有一个字符串:

他在家里感到有点冷,就问店员:“怎么了?” 里面的温度?”他认为系统会 从他窝里的恒温器测得的温度并报告给他 他相反,谷歌助手去拿了天气报告 例如,土耳其的一个度假小镇

这是我获取所有大写单词的函数:

public static function getUpperCase($str) {
    preg_match_all('/\b[A-Z][a-zA-Z]*\b/', $str, $matches);
    return $matches[0];
}
我的输出是:

1: "He"
2: "What"
3: "He"
4: "Nest"
5: "Instead"
6: "Google"
7: "Assistant"
8: "Turkey"
如何获得n-grams:

1: "He"
2: "What"
3: "He"
4: "Nest"
5: "Instead"
6: "Google Assistant"
7: "Turkey"

所以,如果句子中大写单词之间没有任何单词,我想将单词分组在一起。

在初始大写单词匹配后,您可以调整正则表达式,以搜索紧跟大写单词的空格

public static function getUpperCase($str) {
    preg_match_all('/\b[A-Z][a-zA-Z]*(\s+[A-Z][a-zA-Z]*)*\b/', $str, $matches);
    return $matches[0];
}

我对这句话有一个问题:这可能有助于Cisco Spark Assistant和Cisco Spark聊天应用程序室对抗Slack、Microsoft Team和Facebook的Workplace chat等流行服务,这些服务本周出现在桌面电脑上。1:“Cisco Spark Assistant Cisco Spark”[bug]2:“Slack”3:“Microsoft Team”4:“Facebook”[bug]5:“工作场所聊天”[bug]你知道输出数组的第一个元素哪里有问题吗?嗯。当我用输入运行测试并使用我的答案中的正则表达式时,我得到:
[0]=>那[1]=>Cisco Spark Assistant[2]=>Cisco Spark[3]=>Slack[4]=>Microsoft团队[5]=>Facebook[6]=>Workplace Chat
这对我来说似乎是正确的。我在调试时确实更新了我的答案几次。你能尝试再次将我的答案复制/粘贴到你的代码中并进行测试吗?也许你没有得到最终版本。我无法复制你的结果。如上所述,当我尝试在你的评论中输入内容时,
Cisco Spark Assistant
and
Cisco Spark
分为两个不同的令牌。如果您仍然有问题,请在新问题中发布您的准确输入和代码。此答案上有太多的评论。谢谢!