9.1 什么是正则表达式
9.1.1定义
正则表达式是一个描述一组字符串的模式。与算术表达式类似,正则表达式也是由各种操作符结合小的表达式组成,这些所谓的操作符,即是正则表达式中的特殊元字符。
换句话说,正则表达式是由普通字符和元字符组成的字符集,而这个字符集匹配(或指定)一个模式。其基本结构单元是匹配单个字符的正则表达式。任何带有特殊含义的元字符可以通过在字符前加反斜杠‘\’来引用。
正则表达式的主要作用是文本搜索和字符串处理。一个正则表达式匹配单个字符或一个字符串,或字符串的一部分。
9.1.2正则表达式类型
正则表达式有两种类型,分别是:
- 基本正则表达式
- 扩展正则表达式
基本正则表达式具有如下的元字符: - 星号 * :匹配它前面的字符串或正则表达式任意次(包括0次)。比如,“1122*”将匹配‘11’+1个或多个2 ,其可能匹配的字符串将是112、1122、1122222、11223343等。
- 句点 . :匹配除换行符之外的任意一个字符。比如,“112.”将匹配112+至少一个字符,其可能匹配的字符串是1121、1122、112abc等,但不匹配112。
- 插入符号 ^ :匹配一行的开始,但有时依赖于上下文环境,可能表示否定正则表达式中一个字符串的意思。比如,“^abc”将只匹配行首的abc字符串。
- 美元符 $ :在一个正则表达式的末尾,匹配一行的结尾。比如,“123”将匹配一个空行。
- 方括号 [] :匹配方括号内指定的字符集中的一个字符。比如,“[abc]”将匹配字符a、b、c中的任意一个字符,“[a-h]”将匹配从a到h的任意一个字符,“[A-Z][a-z]”将匹配任意一个大写或小写字母,“[^a-d]”将匹配除a到d之外的所有字符。
- 反斜线符号 \ :转义一个特殊的字符,使这个字符得到字面意义的解释。比如,“$”将表示回它的原意“$”,而不是表示行尾的的正则表达式含义。类似地,“\”表示的字意是“\”。
- 转义尖括号 <> :用于标记单词边界。尖括号必须是转义的,否则它们只有字符的字面含义。比如,“<the>”匹配单词“the”,但不匹配“them”、“there”、“other”等等
扩展正则表达式,在上面的基本正则表达式的元字符的基础上又增加了几个元字符,如下所示: - 问号 ? :匹配0个或1个前面的字符,它通常用于匹配单个字符。比如,“ab?c”将匹配“ac”或“abc”。
- 加号 + :匹配一个或多个前面的字符,它和星号*的作用相似,但它不匹配0个字符的情况。比如,“ab+c”将匹配“abc”、“abbc”、“abbb…c”等。
- 转义波形括号 {} :指示匹配前面正则表达式的次数。波形括号必须是转义的,否则它们只有字符的字面含义。比如“[0-9]{5}”将匹配5位数字。
- 圆括号 (