我遇到这些字符串有问题:
1) 125******* or 125co****** or 125CO*******
2) 125af***** or 125AF****** or 125f****** or 125AF********
初始数字的长度可以在2到11个字符之间,然后是一些子字符串(例如“co”,“f”等),然后是字母数字字符串。
现在我制作了这两个正则表达式,但它们无法正常工作:
/^([0-9]{2,11})([c]?[o]?)/i
/^([0-9]{2,11})(a?)f/i
请注意,两种情况都不应该发生冲突。 1)和2)是分开的。 我该怎么办?
编辑:从评论中添加:
我添加了更多信息来解释。通过管理面板,用户可以上传文件,系统应根据其名称将它们保存到正确的目录中。
EG。一个名为
的文件125.doc or
125co_tes.doc or
125CO_tes.doc
应保存到“集合”目录中,
但那些叫做
125af.double.jpg or
125AF-happy.txt or
125f_testlong.xls or
125AF.pdf
应保存到“文档”目录中,依此类推。
答案 0 :(得分:1)
匹配“集合”的文件:
/^(\d{2,11})((?:(?:c?o|co?).*)?\.[a-z0-9]+)$/i
匹配“文档”的文件:
/^(\d{2,11})((?:af?|a?f).+)$/i
如果您的申请不够严格(或太严格),请告诉我。
答案 1 :(得分:1)
string="125af.double.jpg"
case string
when /^([0-9]{2,11})(a?)f/i
# Document
when /^([0-9]{2,11})([c]?[o]?)/i
# Collection
end
如果先检查/^([0-9]{2,11})(a?)f/i
,则表示2个正则表达式之间没有冲突。
答案 2 :(得分:0)
使用以下内容,您可以测试两种文件类型
if filename =~ /^\d{2,11}(co|a?f)?/i
if $1 == '' || $1.downcase == 'co'
# do CO
elsif $1.downcase == 'af'
# do AF
end
end
见行动http://rubular.com/r/7jGxQVJMNC
如果你有更多2例,那肯定很难维持......