瞎扯淡 Ruby 的正则表达式真是强大啊

chinakr · 2013年06月23日 · 最后由 luikore 回复于 2013年06月24日 · 4666 次阅读

如果不用 Ruby,我真不知道该怎么办

@@rules = [{ # 文件名转换规则 :from => /^(?\S+?) (?[^+])+(?[^+])+(?[^+])+((?[^+])+)?(?[^+]*)+(?[^+]+)$/, :to => '2013 年度\k<quarter>-\k<subject>-\k<district>-\k<rank>\k<promotion>-\k<title>-\k<author>-20130620', }, { :from => /^(?<rank>.+?) (?<quarter>.+?)((?<district>.+?))(?<author>.+?)( |—)(?<title>.+)$/, :to => '2013 年度\k<quarter>-\k<rank>-\k<district>--\k<title>-\k<author>', }, { :from => /^(?<rank>.+?)( |--)(?<author>.+?)(-|--)(?<title>[^-]+)$/, :to => '2013 年度---\k<rank>-\k<title>-\k<author>-2013-06-20', }, { :from => /^(?<rank>.+?)(\s+|--)(?<title>[^ -—]+?)(-+|—| )(?<author>[^ -—]+?)((-+|—| )(?<pubdate>\d+))?$/, :to => '2013 年度---\k<rank>-\k<title>-\k<author>-\k<pubdate>', }, { :from => /^(?<rank>[^ -]+?)( |--)(?<title>.+?)/, :to => '2013 年度---\k<rank>-\k<title>--2013-06-20', }]

文件名转换成功率达到了 99.69%(319/320)。

这是正则的强大。只能说 ruby 里面的正则也比较好用。

rename 命令很强

楼主应该说这是 Ruby 中正则表达式引擎的强大,matz 选对了引擎。。

#3 楼 @iBachue 我相信这不是偶然的^^

#4 楼 @chinakr 反正《matz 的程序世界》里是这么写的啦 Ruby1.8 用的是 Emacs 的正则表达式引擎,功能太薄弱了,所以 1.9 就换上了鬼车,一下子就牛逼起来了。

#5 楼 @iBachue 鬼车?求科普

#6 楼 @Peter 大部分文档都是日语写的 如果你能看懂的话那就看 ls 的吧。。。 不过这个也许好点 https://github.com/k-takata/Onigmo Ruby 2.0 的正则引擎

正则与具体语言没半毛钱关系,无非是使用的方便与否

#6 楼 @Peter 可参阅 Matz 的那本 ruby 书

#7 楼 @blacktulip #8 楼 @iBachue #10 楼 @staticor 谢谢!

我也很喜欢正则,不过也就在一般够用的水平,边写边试地用正则

#9 楼 @ruchee 只是每个语言都有其正则方言,Onigmo 是支持多种正则方言的...

需要 登录 后方可回复, 如果你还没有账号请 注册新账号