3.正则表达式
1.简介
-
正则表达式是由普通字符(如英文字母)以及特殊字符(也称为元字符)组成的文字模式
-
正则表达式基本书写符号
符号 含义 示例 解释 匹配输入 \ 转义符 * 符号“*” * [ ] 可接收的字符列表 [efgh] e、f、g、h中的任意1个字符 e、f、g、h [^ ] 不接收的字符列表 [^abc] 除a、b、c之外的任意1个字符,包括数字和特殊符号 m、q、5、* | 匹配“|”之前或之后的表达式 ab|cd ab或者cd ab、cd ( ) 将子表达式分组 (abc) 将字符串abc作为一组 abc - 连字符 A-Z 任意单个大写字母 大写字母 -
正则表达式限定符
-
限定符将可选数量的数据添加到正则表达式,下表为常用限定符:
符号 含义 示例 解释 匹配输入 不匹配输入 * 指定字符重复0次或n次 (abc)* 仅包含任意个abc的字符串,等效于\w* abc、abcabcabc a、abca + 指定字符重复1次或n次 m+(abc)* 以至少1个m开头,后接任意个abc的字符串 m、mabc、mabcabc ma、abc ? 指定字符重复0次或1次 m+abc? 以至少1个m开头,后接ab或abc的字符串 mab、mabc、mmmab、mmabc ab、abc、mabcc {n} 只能输入n个字符 [abcd]{3} 由abcd中字母组成的任意长度为3的字符串 abc、dbc、adc a、aa、dcbd
-
-
常用的限定符
符号 含义 示例 解释 匹配输入 不匹配输入 {n,} 指定至少 n 个匹配 [abcd]{3,} 由abcd中字母组成的任意长度不小于3的字符串 aab、dbc、aaabdc a、cd、bb {n,m} 指定至少 n 个但不多于 m 个匹配 [abcd]{3,5} 由abcd中字母组成的任意长度不小于3,不大于5的字符串 abc、abcd、aaaaa、bcdab ab、ababab、a ^ 指定起始字符 ^[0-9]+[a-z]* 以至少1个数字开头,后接任意个小写字母的字符串 123、6aa、555edf abc、aaa、a33 $ 指定结束字符 ^[0-9]-[a-z]+$ 以1个数字开头后接连字符“–”,并以至少1个小写字母结尾的字符串 2-a、3-ddd、5-efg 33a、8-、7-Ab
-
匹配字符集
-
匹配字符集是预定义的用于正则表达式中的符号集。如果字符串与字符集中的任何一个字符相匹配,它就会找到这个匹配项。
符号 含义 示例 解释 匹配输入 不匹配输入 . 匹配除 \n 以外的任何字符 a..b 以a开头,b结尾,中间包括2个任意字符的长度为4的字符串 aaab、aefb、a35b、a#*b ab、aaaa、a347b \d 匹配单个数字字符,相当于[0-9] \d{3}(\d)? 包含3个或4个数字的字符串 123、9876 12、01023 \D 匹配单个非数字字符,相当于0-9 \D(\d)* 以单个非数字字符开头,后接任意个数字字符串 a、A342 aa、AA78、1234 \w 匹配单个数字、大小写字母字符,相当于[0-9a-zA-Z] \d{3}\w{4} 以3个数字字符开头的长度为7的数字字母字符串 234abcd、12345Pe 58a、Ra46 \W 匹配单个非数字、大小写字母字符,相当于0-9a-zA-Z \W+\d{2} 以至少1个非数字字母字符开头,2个数字字符结尾的字符串 #29、#?@10 23、#?@100
-
2.应用
-
正则表达式举例
-
非负整数:“^\d+$ ”
-
正整数: “ ^[0-9]1-9$”
-
非正整数: “ ^((-\d+)|(0+))$”
-
整数: “ ^-?\d+$”
-
英文字符串: “ ^[A-Za-z]+$”
-
英文字符数字串: “ ^[A-Za-z0-9]+$”
-
英数字加下划线串: “^\w+$”
-
E-mail地址:“^[\w-]+(.[\w-]+)*@[\w-]+(.[\w-]+)+$” *
-
URL:“^[a-zA-Z]+://(\w+(-\w+))(.(\w+(-\w+)))(\?\s)?$”
-
3.综合案例
-
实例1
-
这个号码的格式是999-99-9999。用来匹配它的正则表达式。在正则表达式中,连字符(“-”)有着特殊的意义,它表示一个范围,比如从0到9。
-
-
实例2
-
假设进行搜索的时候,你希望连字符号可以出现,也可以不出现——即,999-99-9999和999999999都属于正确的格式。这时,你可以在连字符号后面加上一个数量限定符号,
-
-
“否”符号
-
“^”符号称为“否”符号。如果用在方括号内,“^”表示不想要匹配的字符。例如,图四的正则表达式匹配所有单词,但以“X”字母开头的单词除外。
-
-
圆括号和空白符号
-
假设要从格式为“June 26, 1951”的生日日期中提取出月份部分,用来匹配该日期的正则表达式可以如图所示:
-
“\s”符号是空白符号,匹配所有的空白字符,包括Tab字符。如果字符串正确匹配,接下来如何提取出月份部分呢?只需在月份周围加上一个圆括号创建一个组
-