我在数据库中有一个设备列表,例如Model X123 ABC
。系统的另一部分接受用户输入,并且需要尽可能地将它们的条目与现有设备匹配。但是用户可以输入他们想要的任何东西。他们可能会将Model 100 ABC X123
或Model X123
输入上述模型。
明白,这是一个一般的例子,可用模型和匹配用户条目的排列是巨大的,我只是尝试尽可能多地匹配,以便可以将手动更正保持在最低限度。
系统是在FileMaker中构建的,但可以访问我希望的任何插件,这意味着我可以访问Groovy,PHP,JavaScript等。我目前正在使用ScriptMaster插件为其他人使用Groovy。简单的正则表达式模式匹配其他地方,我想知道最简单的方法是使用正则表达式。
我对正则表达式的想法是我正在寻找模式,但我不确定我是否可以说,"将此分组分配给此模式,无论模式的顺序如何组&#34。在上面,我想找出该字符串是否包含三种模式:(?i)\bmodel\b
,(?i)\b[a-z]\d{3}\b
和(?i)\b[a-z]{3}\b
,但我并不关心它们的顺序。如果所有三种如果找到了,我想按照特定的顺序放置它们:首先是单词" model",大写,然后是全大写的字母数字代码,最后是全字母的纯字母代码。
可以(应该?)正则表达式处理这个吗?
答案 0 :(得分:2)
我建议将输入标记为单词,将每个输入与支持的标记相匹配,然后将它们组合成规范的分类插槽。
更好的方法是在用户输入信息时提供搜索建议,并要求用户选择建议。
但是可以通过(以编程方式)构建具有所有前提的怪物正则表达式模式来实现它:
\b(?:(model)\s+([a-z]\d{3})\s+([a-z]{3})
|(model)\s+([a-z]{3})\s+([a-z]\d{3})
|([a-z]\d{3})\s+(model)\s+([a-z]{3})
|([a-z]\d{3})\s+([a-z]{3})(model)
|([a-z]{3})(model)\s+([a-z]\d{3})
|([a-z]{3})\s+([a-z]\d{3})\s+(model)
)\b
它必须使用命名的捕获组,但我将其留下,希望上述内容可能接近可读。
答案 1 :(得分:0)
我不确定我是否完全理解您的基本目标 - 这是否能够匹配类似产品(例如,具有相同型号的产品)?如果是这样,可以在计算字段中使用像这样的单词排列函数来创建一个多键:http://www.briandunning.com/cf/1535
如果你需要在FileMaker中进行部分匹配,你也可以使用像这样的redux搜索功能:http://www.fmfunctions.com/fid/380
如果您有任何不适合在此处发布的问题,请随时与我联系。