首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中需要Regex的帮助,识别类似的单词

在PHP中需要Regex的帮助,识别类似的单词
EN

Stack Overflow用户
提问于 2011-07-25 07:47:40
回答 4查看 219关注 0票数 1

我举了一个简单的例子来描述这个问题。

输入文本:

韦恩鲁尼是一名英格兰足球运动员,他是曼联的前锋。鲁尼·鲁尼( Rooney )在对阵澳大利亚的友谊赛中首次代表国家队出场,成为英格兰最年轻的球员。西奥·沃尔科特在2006年5月打破了鲁尼的出场纪录36天。

输入关键词:韦恩·鲁尼

预期输出(关键词计数):3(韦恩鲁尼,鲁尼,鲁尼)

所以,它不仅包括“韦恩鲁尼”,还包括其他类似的词。

我已经搜索过了,我得到了这个正则表达式:

代码语言:javascript
复制
$keyword_count = preg_match_all("/(\w*(?:wayne|rooney)\w*)/i", $source, $res);

但它给了我4作为输出。它把“韦恩·鲁尼”作为两个不同的关键词。

有人能帮我构造正确的公式吗?Regex真的是这方面最有效的解决方案吗?我有大量的文本要搜索。还有其他解决方案,例如PHP文本挖掘库吗?

非常感谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-25 07:50:47

试试这个正则表达式:

代码语言:javascript
复制
(?i)(\b(?:wayne(?:'s)?\s*)?rooney(?:'s)?\b)

如果解析字符串的常规规则数量有限,regex是解决问题的适当方法。通常情况下,您应该使用其他方法(可能是几个regex)。

票数 1
EN

Stack Overflow用户

发布于 2011-07-25 07:52:13

也许这是有用的,或者是regex的另一种选择:

http://php.net/manual/en/function.levenshtein.php

距离

票数 0
EN

Stack Overflow用户

发布于 2011-07-25 07:58:13

对于这种特殊情况,您可以这样做

代码语言:javascript
复制
Wayne(?:\sRooney[\w']*)?|Rooney[\w']*

看吧,在Regexr上

它说:搜索Wayne RooneyRooney (每个都可以跟着[\w']*),但是对于第一部分,(?:\sRooney[\w']*)?是可选的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6813083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档