我有一段非常长的文本$text
,这是一组普通的英语句子(例如博客上的文章)
我有一些保留字母的数组
$reserved=array("L", "N", "C");
我有一系列免费字母,例如
$free=array("A", "E", "I", "O", "U");
如何找到本文中包含以$reserved
字母开头的单词的所有短语,其顺序与它们在数组中的顺序相同,但可能有也可能没有$free
中字母开头的单词1}}数组。
最终预期的正确结果
$reserved
数组相同,U出现在$ free数组中)$reserved
数组相同,其中来自free
数组的O,A,O $reserved
数组中的顺序相同,但free
数组中没有带字母的单词)结果不正确
$reserved
数组只有3个保留字母表时找到了额外的N)$free
或$reserved
数组中)$reserved
阵列中的顺序不一样)我知道我可以在循环中逐个查看单词,然后循环遍历所有必需的字母表和可选字母表,但我认为这将是一种非常耗时且低效的查找单词的方法。我正在寻找更有效的方法来解决它......或许有一些正则表达式魔法或类似的东西。
你们能否就我应该采取什么方法解决这个问题给我一些指示?
我知道正则表达式,PHP和JS,但如果可以用任何语言建议解决方案,那就没问题了。
答案 0 :(得分:0)
我认为一个简单的循环没有错。
也就是说,你可以提取单词的起始字母,大写生成的字符串(例如:LUNC
),然后将其与'^[AEIOU]*L[AEIOU]*N[AEIOU]*C[AEIOU]*$'
匹配。生成此表达式很容易。不过,我不确定这是值得的努力......你最终会得到一个更丑陋的代码。
答案 1 :(得分:0)
如上所述,您可以使用循环。你提到了使用正则表达式的可能性,所以我写了一个只是为了涵盖所有基础 - 对我有用的是:
/^([aeiou]\w+\s?)*L\w+ ([aeiou]\w+\s?)*N\w+ ([aeiou]\w+\s?)*C\w+$/gim
像上面这样的正则表达式可以用PHP自动生成,不过你是否想要复杂的东西是另一回事!正如你提到的正则表达式的可能性,我认为你还是希望看到它。