【问题标题】:Finding phrases with words starting with predefined alphabets in the same order以相同顺序查找以预定义字母开头的单词的短语
【发布时间】:2013-08-21 04:32:51
【问题描述】:

我有一段很长的文字$text,它是正常英语句子的集合(例如来自博客的文章)

我有一些保留的字母数组

$reserved=array("L", "N", "C");

例如,我有一个免费字母数组

$free=array("A", "E", "I", "O", "U");

我如何才能找到此文本中所有以$reserved 字母开头的单词的短语,它们的顺序与它们在数组中的顺序相同,但在$free 数组中可能有也可能没有以字母开头的单词.

最终预期的正确结果

  1. 让我们不要作弊(L、N、C 的顺序与 $reserved 数组中的顺序相同,并且 U 存在于 $free 数组中)
  2. 失去了我们的海军和所有指挥官(“L、N 和 C 的顺序与 $reserved 数组中的顺序相同,而 free 数组中的 O、A、O)
  3. 离开挪威冷藏(L、N、C 的顺序与 $reserved 数组中的顺序相同,没有包含 free 数组中字母的单词)

结果不正确

  1. 让我们不要欺骗我们的邻居(找到了 L、N C,但发现了额外的 N,而 $reserved 数组只有 3 个保留字母)
  2. 我们不要欺骗我们的朋友(F 不在 $free$reserved 数组中)
  3. 来看看我的车(L、N、C 的顺序与 $reserved 数组中的顺序不同)

我知道我可以一次一个地遍历单词,然后遍历所有必需的字母表和可选的字母表,但我认为这将是一种非常耗时且效率低下的查找单词的方法。我正在寻找更有效的方法来解决它......也许有一些正则表达式魔法或类似的东西。

你们能否给我一些建议,告诉我应该如何解决这个问题?

我知道正则表达式、PHP 和 JS,但如果可以用任何语言提出解决方案,我可以。

【问题讨论】:

  • 你试过了吗?就像通过循环逐字逐句地阅读您的文本并检查某些条件?
  • 是的,我知道我可以循环遍历单词,然后遍历所有必需的字母和可选字母,但我认为这将是一种非常耗时且效率低下的查找方式出的话。我正在寻找更有效的方法来解决它......也许有一些正则表达式魔法或类似的东西。
  • 只使用一个简单的循环。

标签: php regex algorithm search


【解决方案1】:

我认为一个简单的循环没有任何问题。

也就是说,您可以提取单词的起始字母,将生成的字符串大写(例如:LUNC),然后将其与'^[AEIOU]*L[AEIOU]*N[AEIOU]*C[AEIOU]*$' 匹配。生成这个表达式很容易。不过,我不确定这是否值得……你最终会得到一个更丑陋的代码。

【讨论】:

    【解决方案2】:

    如前所述,您可以使用循环。您提到了使用正则表达式的可能性,所以我写了一个只是为了涵盖所有基础 - 对我有用的是:

    /^([aeiou]\w+\s?)*L\w+ ([aeiou]\w+\s?)*N\w+ ([aeiou]\w+\s?)*C\w+$/gim
    

    RegExr

    像上面这样的正则表达式可以用 PHP 自动生成,但你是否想要复杂的东西是另一回事!正如你提到的正则表达式的可能性,我想你还是想看看这个。

    【讨论】:

      猜你喜欢
      • 2015-07-14
      • 1970-01-01
      • 2017-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多