您的位置:首页 > 其它

正则表达式学习整理

2007-10-29 20:44 323 查看
字面上很难懂的一个名词──正则表达式, 不过regular expression会好理解些。
刚看了台湾人写的一篇说明文档,受益匪浅,终于对regexpr有所认识,下面就对其做一个整理。原文可参考 http://phi.sinica.edu.tw/aspac/reports/94/94019/ 看的时候要用BIG5编码才行。

为什么要使用正则表达式呢,因为某些时候使用者想用简短的语句来描述复杂的或具有某种特征的字符串时,正则表达式可以很好得完成任务,上面的简短的语句就是regular expression了

正则表达式有很多字符组成,下面一一说明

普通字符:除了“.”,"*","<",">","/","(",")","{","}","[","]","^","$","+","|","?"之外的所有字符

"."字符,该字符代表任意一个字符,在shell中该字符与"?"同意,如"."、”..“、"..."分别代表任意一个字符、任意2个字符和任意3个字符

"^"字符,表示该字符串出现于行首,如"^The"可以匹配行首为The字符开头的字符串,”The“或”There“都可以被匹配

”$“字符,表示该字符串出现于行尾,类似”^“

"/"反斜杠,可以作为转义字符使用,"/."使"."字符不具有特殊意义;它还具有另外一个意义,"/t"代表tab,"/n"代表回车等

”[...]"方括号,可以匹配括号中的字符中的一个字符,如[abc]可以匹配a或b或c,也可以用短横扛"-"表示一定范围中的字符中的 一个,如[a-zA-z]匹配英文子母中的一个;还可以紧跟着"["符号后面添加一个”^“符号表示匹配除括号中字符之外的其他字符,如[^abc]匹配 除abc之外的其他一个字符

”*“星号字符,该字符一定要和shell中的"*"区分开来,shell中的"*"表示任意长度的任何字符,正则表达式中的”*“号则另有 它意,表示在"*"之前的字符的后面有0个或多个同样的字符,如"ab*"可以匹配"a","ab","abb","abbb..."

”/<“符号,”/<reg“表示出现在字首且与reg相匹配的字符串

"/>"符号,"reg/>"表示出现在字尾且与reg相匹配的字符串,所谓字是被逗号,句号,空格,tab分隔开来的组成字符 串的单位,例如one red,the other is white中的one、red、the、other、is、white为所谓的字,正则表达式”/<the“可以匹配the,"/< white/>"匹配white

"/(.../)",括号中括住的表达式,可以用/(1/)保存起来,/(ab/)w/(1/)可以匹配abwab;第一个被/(/)括起来的字符串用/(1/)表示,第二个可以用/(2/)表示,依次类推,最多可以保存9个。如/(./)/(./)/(./)w/(3/)/(2/)/(1/)可以匹配abcwcba,123w321等有该特征的字符串

"/{下线数字,上线数字/}"这类正则表达式可以匹配字符a后面跟着的字符的范围,如“[0-9]/{2,4/}”可以匹配2位到4为的任何数字

"/{数字/}"可以表示字符后面跟着有多少个相同字符,如"a/{5/}"表示匹配aaaaa这样的字符串,"[0-9]/{5/}"匹配任意的5位数字

”/{下线数字,/}“注意区别,里面有个逗号,匹配至少下线数字个字符j。如"a/{2,/}"可以匹配aa,aaa,aaaa等不少于2个字符的a

"+"号形容一个或一个以上的字符,如”[0-9]+“表示一位或一位以上的数字

”|“表示逻辑上的 ”或“

”?“形容可以出现一次或不出现[+-]?[0-9]+表示整数集

”()“括号中的内容为一个group,如”(ab)+“匹配abab,ab,ababab等

"+"、”|“、”()“、"?"为扩展正则表达式的用法,awk,egrep支持这种用法,而vi、sed、grep等不支持
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: