正则表达式是让我又爱又恨的东西。
爱在它的功能强大,恨在它的凌乱不互通,POSIX标准本身就有bug,各家实现又各有不同。
man regex可以看到对POSIX标准的regex的评述。
这里有一个不错的介绍正则表达式各种资料的网站。
http://iregex.org/
这个网页总结了各大unix tools对正则表达式的支持。
http://www.greenend.org.uk/rjk/2002/06/regexp.html
而我用得最多的无非是vi,sed,grep,less了。
我自己的发现是:
[[. .]] 这种,在标准里面是把字符元素合成单个元素进行匹配的。比如[[.ab.]]匹配ab这个整体,而不是a或b,但是less,grep和vi里都不支持。
[[= =]]这种,在标准里面是匹配等价类的,比如,[[=^=]]这个匹配所有与^等价的字符,如果'=','.',','是与'^'一类的话,则匹配它们的其中一个,但是grep,vi里都不支持。(less支持)
[[: :]]这种,在标准里面是匹配一个集合的,比如[[:digit:]]匹配[0-9],这点被几乎所有的工具支持。
另外还有很多小的细节,一下子非常难梳理清楚,这就是让我最不爽的地方了,很容易弄混regex的用法。
爱在它的功能强大,恨在它的凌乱不互通,POSIX标准本身就有bug,各家实现又各有不同。
man regex可以看到对POSIX标准的regex的评述。
这里有一个不错的介绍正则表达式各种资料的网站。
http://iregex.org/
这个网页总结了各大unix tools对正则表达式的支持。
http://www.greenend.org.uk/rjk/2002/06/regexp.html
而我用得最多的无非是vi,sed,grep,less了。
我自己的发现是:
[[. .]] 这种,在标准里面是把字符元素合成单个元素进行匹配的。比如[[.ab.]]匹配ab这个整体,而不是a或b,但是less,grep和vi里都不支持。
[[= =]]这种,在标准里面是匹配等价类的,比如,[[=^=]]这个匹配所有与^等价的字符,如果'=','.',','是与'^'一类的话,则匹配它们的其中一个,但是grep,vi里都不支持。(less支持)
[[: :]]这种,在标准里面是匹配一个集合的,比如[[:digit:]]匹配[0-9],这点被几乎所有的工具支持。
另外还有很多小的细节,一下子非常难梳理清楚,这就是让我最不爽的地方了,很容易弄混regex的用法。
No comments:
Post a Comment