如何在 PHP 中匹配具有共同前缀的单词?

Posted

技术标签:

【中文标题】如何在 PHP 中匹配具有共同前缀的单词?【英文标题】:How to match words with common prefix in PHP? 【发布时间】:2011-05-19 14:07:04 【问题描述】:

我需要写一个正则表达式来匹配这个词。可以使用/\bword\b/ 模式来查找确切的单词。

但我希望模式找到wordwordswording 等等。

例如,我想编写一个模式来在段落字符串中查找术语 accountaccountingaccountsaccountant

【问题讨论】:

【参考方案1】:

我认为这会让你到达那里:

/\<word(|s|ing)\>/

【讨论】:

【参考方案2】:
\b(accounting|accounts|account)\b

【讨论】:

【参考方案3】:

我可能错了,但我不认为 "/\b*word*\b/" 得到单词,而是它实际上匹配 '''''wor'||worddddd| 之类的东西,如果你想要单词及其变体,请尝试:

/\bword[^\b]+\b/i

【讨论】:

忽略那些 * 我实际上是想加粗这个词。您的解决方案不是寻找一个单词,而是在第一次匹配单词之后实际匹配所有内容。 [^\b] 不起作用 - \b 不会被解释为字符类中的单词边界。 \b 的否定是 \B,但即使这样在这里也行不通 - 重复一个零长度的断言没有任何意义,当然它永远不可能匹配一个 \b 对在\B之后。【参考方案4】:

要匹配您的关键字(可选地后跟singant),您可以使用:

/\b($word(?:|s|ing|ant))\b/i

see it

如果您想允许任何可选字母作为后缀,您可以使用:

/\b($word\w*)\b/i

【讨论】:

任何变体的第二个都对我有用。谢谢。 @andread \w 丢失而不是 .在您的模式中,无论如何再次感谢所有人 @daron:不客气。另外,由于您是 SO 新手,我想告诉您,您可以通过单击答案旁边的正确标记来接受对您帮助最大的答案 :) 如何对mysql使用相同的表达式。我试过 SELECT * FROM table WHERE word REGEXP '/\b($word\w*)\b/i';这没有用

以上是关于如何在 PHP 中匹配具有共同前缀的单词?的主要内容,如果未能解决你的问题,请参考以下文章

仅当没有给定前缀具有任意数量的空格时才匹配单词

ElasticSearch如何使用 ElasticSearch 搜索单词的一部分 模糊搜索 正则匹配 前缀匹配

正则表达式:如何匹配不以前缀列表开头的子字符串

如何在没有意外匹配的情况下在 PHP 中的字符串中查找整个单词?

bzoj2434

列出与给定前缀匹配的单词的新单词表(python 理解问题)