正则表达式的学习以及Everything

当初在高一学VB的时候,何大神就曾提到过正则表达式,我还记得那个中午拿着我妈的小小的天语白手机和他聊(zhuang)天(bi)的情景。14年拿到php&SQL那本书时就曾接 触过正则,然而。。。。到现在才完全学习的我真是懒癌到家了。

在PHP的书上研究了一番,又去图书馆借了《正则指引》,总算把正则搞懂了些名堂来。

正则中的少用.*这个忠告很好,之前没怎么考虑过回溯过程对CPU的影响。还是就是贪婪模式与非贪婪模式的选择的注意。
之前在写计算器课设时,要去匹配最里面的一个括号,当时这个问题想用正则解决,最后却因为种种原因而没成行,现在在回顾这个问题。
算式

$math='1+2+(8*9-9+sin(55+62)+cos(20+(2+6)))';

如何层层迭代计算去括号?
用字符串的方法,是要先找到这个字符串里面最后一个左括号,之后再匹配出离它最近的右括号,之后截取子字符串即可,在上述例子中,结果为(2+6)。
但要若用正则呢?面对这个问题,我一直想到的是用断言,断言右边存在左括号,但这样显然是不可行的,对于正则来说,这样的否定的匹配不是唯一的,比如(?=\() 将会匹配除了左括号前面一位外其余所有的位数。所以我们需要换个思路。
最内的括号,也就是说里面不包含其他括号的括号,想到这样的逻辑结构,正则就好写了。

$match='\([^\(\)]+\)';

这样的话,先匹配的是(55+62),不过计算完后替换掉,效果也是一样的啦。

之后发现了EveryThing这个神器,可以迅速扫描查询硬盘中的所有文件,连加密过的locker文件夹中文件都可以找到,支持正则查询。界面是长下面这个样子:
Everything
主页是:http://www.voidtools.com/
下载列表里还提供SDK,简直良心。
所以,在迅速搜索之时,还能找到有趣的东西。
举个例子,某些片子。。其番号系统是固定的,稍稍有规律的,想想看基本都是几个字母杠几个数字,用做正则的话,很容易写出来:
/[a-z]{3,7}-[0-9]{3,7}/mig
再加上后缀匹配的话,可以这样写:
^[a-z]{3,7}-[0-9]{3,7}\.[mp4|avi|rm|rmvb|flv|mkv|mov|wmv|vob]$
结果也许会让人满意哦~

发表评论

电子邮件地址不会被公开。 必填项已用*标注