虽然闻名已久,但是,终究是机缘未到,每次都是浅尝辄止,甚至没自己写过一行正则表达式。今天终于写了自己第一个正则表达式,纪念一下:
\s/udisk/[1-9]*
上面这以pattern主要是为了,在某一长串中,找到字符串 " /udkisk/xx",其中xx表示一串数字,对这串数的长度没有要求。
对上面的各个段做一下解释:
1) "\s",表示一个空白字符,匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。通常作为字符串的开始符。这样的字符,在正则表达式中叫做MetaCharacter,中文翻译做元字符。表示“一个字符”的元字符还有:
- “\b”,匹配英文中一个单词的开始或结尾,可以是空格、标点符号、换行。但是,事实上,它只是匹配了一个位置,只是用来发现单词的开始或结尾。
- “.”,可以匹配换行符外的任意字符。
- “\d”,匹配一个数字。等价于用集合表示的[0-9]。
- “\w”,匹配一个字母,或数字,或下划线,或汉字。
- “范围[1-9]”或“集合[fsefsfd]”,事实上这两个对应的英文单词都可以是set,这里表示匹配范围内,或者集合内的某一字符。
2)所以,用上面的元字符把我的第一个正则表达式拆开,就是“\s”+"/udisk/"+"[1-9]*”,所以我们要匹配的串是 “ 空格”+“/udisk/”+“数字”+“数字”+。。。+“数字”。这里的 “*” 是指前一个元字符会出现0次或无限多次。
3)上面的 “*” 叫做限定符,即限定出现次数的。正则表达式中的限定符包括:
- “*”,出现0次或者无限多次。
- “+”,出现1次或者无限多次。最少1次。
- “?”,出现0次或1次。
- “{n}”,出现n次。
- “{n,}”, 出现n次或更多次。
- “{n,m}”,最少出现n次,最多出现m次。
4)我们也可以把一串元字符和限定符(或其他符号)组成的表达式用括号括起来,然后把这一段表达式当做一个元字符对待,这段叫做一个组。比如,(\w+\.){2}\w+ ,表示 “ xxx.xxx.xxx ” ,其中xxx为任意数量个字母。
这只是正则表达式的一部分入门知识,所以。。。还要加油。另外,bash中使用正则表达式的三把利器,也要尝试掌握:grep,sed,awk。