如何在 PHP 中匹配具有共同前缀的单词?
Posted
技术标签:
【中文标题】如何在 PHP 中匹配具有共同前缀的单词?【英文标题】:How to match words with common prefix in PHP? 【发布时间】:2011-05-19 14:07:04 【问题描述】:我需要写一个正则表达式来匹配这个词。可以使用/\bword\b/
模式来查找确切的单词。
但我希望模式找到word
、words
、wording
等等。
例如,我想编写一个模式来在段落字符串中查找术语 account
、accounting
、accounts
和 accountant
。
【问题讨论】:
【参考方案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】:
要匹配您的关键字(可选地后跟s
、ing
、ant
),您可以使用:
/\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 搜索单词的一部分 模糊搜索 正则匹配 前缀匹配