【问题标题】:PHP Regex to match word in a sentence with optionally only other certain wordsPHP Regex 将句子中的单词与可选的其他特定单词匹配
【发布时间】:2015-09-05 20:00:24
【问题描述】:

我正在寻找一个 PHP 正则表达式来匹配句子中的一个单词,该单词还可以选择允许句子中的一些其他单词,但是如果句子中有任何其他单词不在允许列表中,则匹配应该失败.例如:

The quick fox

我在这里寻找狐狸。 'the' 和 'quick' 如果它们出现也可以。既然这些词是可选的,那么就

fox 

也可以。不过,

The quick brown fox

不好。我不想要一只棕狐。

您也可以提出另一种执行此操作的方法,但它需要非常快。

编辑:这些词将出现在 fox 之前,但它们可以以任何顺序出现,所以

 quick The fox

也应该匹配。

【问题讨论】:

  • 请展示您已经尝试过的内容。
  • @RomanMik 我尝试了一些花哨的前瞻,比如 ^(?=.*?the)(?=.*?quick).*?dog,但并没有完全融合在一起。
  • 您的用例是什么?如果你对你想要完成的事情给出一个更完整和一般的想法,编写一个高性能的正则表达式会更容易。
  • @jreut 我想我找到了解决方案。我发布了我的答案。

标签: php regex


【解决方案1】:

只需将前两个单词设为可选。

^(?:(?:The )?(?:quick )?fox|(?:quick )(?:The )?fox|(?:fox )?(The )?quick|(?:The )?(?:fox )?quick)$

【讨论】:

  • 哦,对不起。应该提到“狐狸”之前的单词可以以任何顺序出现,所以“快速狐狸”也应该匹配。
  • 那么你必须写出由|运算符分隔的所有组合。
  • ^(?:(?:The )?(?:quick )?fox|(?:quick )(?:The )?fox|(?:fox )?(The )?quick)$, regex101.com/r/vQ4tX9/1
  • 请随意填补缺失的部分。
  • 感谢您的帮助,但我想我找到了更好的方法。
【解决方案2】:

好的,我想我找到了一个不太复杂的解决方案,而且就我测试而言,它似乎可以达到我想要的结果

 ^(?(?=\b)(?:The|quick|\W)|.)+?fox

我在这里检查每个字符,看看它是否是单词边界。如果是,那么您必须在该点匹配“the”或“quick”或非单词字符(表示您位于单词的末尾)。这将一直持续到我匹配“狐狸”。如果我匹配允许的单词之外的任何其他单词,则匹配失败。

【讨论】:

  • 很高兴您找到了解决方案,但它似乎无法解决您在原始问题中提出的问题。测试“The quick fox brown”,它会错误匹配。
  • @jreut 不,我不在乎狐狸之后会发生什么。正如我所说,这些词将出现在 fox 之前,但它们是可选的,可以以任何顺序出现。抱歉,如果我不清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多