【发布时间】:2012-07-20 17:23:00
【问题描述】:
我一直在努力寻找实现我的系统的好方法,该系统基本上与字符串中的节目的季节和剧集编号相匹配,您可以在此处查看当前工作代码:https://github.com/huddy/tvfilename
我目前正在重写这个库,并希望有一种更好的方式来实现匹配的发生方式,目前基本上它的工作方式是:
有一个包含类的文件夹(称为处理程序),每个处理程序都是一个实现接口以确保调用 match() 方法的类;如果存在,则此匹配方法使用存储在该处理程序类(其中有很多)的属性中的正则表达式来尝试匹配季节和剧集。
该类通过将每个处理程序实例化到存储在属性中的数组来加载所有这些处理程序,当我想尝试匹配一些字符串时,该方法会遍历这些对象调用 match();然后返回第一个返回 true 的结果集,其中包含与之匹配的季节和剧集。
我真的不喜欢这种方式,这对我来说有点 hacky,我希望设计模式可以提供帮助,我的最终目标是使用最佳实践来做到这一点,我想知道我应该使用哪一个利用?
存在的其他问题是:
多个处理程序可以匹配一个字符串,因此它们必须防止更贪婪的处理程序首先匹配,不确定这是否可以解决,因为某些正则表达式模式必须是贪婪的,但是可能是一个评分系统,它显示了匹配正确率的百分比,但我不知道如何实际实现这一点。
如果实例化所有这些处理程序是一种好方法,我认为速度很重要,但使用最佳实践和坚持设计模式来创建良好、可扩展和可维护的代码是我的最终优先事项。值得注意的是,处理程序类有时会做其他事情,而不仅仅是正则表达式匹配,它们有时会通过删除常用词等来准备要匹配的字符串。
为任何帮助干杯 比利
【问题讨论】:
-
您可以结帐Horde Routes。
-
你想多了。您的贪心问题可以通过将数组从最不贪婪排序到最贪婪来轻松解决,并且您的正则表达式都可以在一个类中。我没有看到比这更直接或更干净的方法了。
标签: php regex oop design-patterns