Character Class
字符组
1.定义:
正则表达式中的结构体(construct)'[……]'成为字符组(character class),它容许使用者列出在某处期望匹配的字符。
2.使用:
a.匹配若干字符之一
例1,需要搜索单词“grey”,但是不确定是“gray”还是“grey”,使用正则表达式
gr[ae]y
可以匹配出“gray”和“grey”,
例2,需要搜索单词smith,但是单词首字母可能会大写,使用正则表达式
[Ss]mith
可以匹配出“smith”和“Smith”
例3,需要匹配<h1>...<h6>,字符组可以列举任意多个字符,因此使用正则表达式
<h[123456]>或者<h[1-6]>
可以匹配出
注:“-”是字符组元字符,称为“连字符”,它表示一个范围。([0-9],[a-z]是很常用的匹配数字和小写字母的简便方式,同时[0-9a-zA-Z]也是常用的多重范围匹配)
b.排除型字符组
例1,需要匹配满足条件(字母q后面不是字母u),使用正则表达式
q[^u]
它将匹配一个未列出的字符(u是列出的字符)
Dot
a.用点号匹配任意字符
例1,需要匹配出时间的数字,时间格式可能为(23-08-00|23:08:00|23/08/00),使用正则表达式
[[0-23].[0-59].[0-59]]
注:"."也是一个元字符,它是一个能够匹配任意字符的“占位符”,上例中的.也可以用[-:/]列举法替换
Alternation
多选结构
a.匹配任意子表达式
例1,需要从一封email中匹配出发信人(from)日期(date)标题(title),使用正则表达式
^(from|date|title):
能匹配出第一行起始是from: date: title:(gr[ae]y可以用多选结构gray|grey代替)
Optional Items
可选项元素
a.元字符'?'
例1,7月英文写法有两种:July和Jul,使用正则表达式
July?
能匹配出July和Jul
注:元字符'?'前面的元素是可选的,匹配时可以有也可以没有
Repetition
重复出现
1,定义
元字符'+'和'*'都用于表示重复出现,其中'+'表示之前紧邻的元素出现1次及以上,而'*'表示出现0次及以上。
2,使用
例1,有一个HTML的tag <size=14>,等号,尖括号内侧都有可能有空格,使用正则表达式
<.*size.*=.*[0-9]+.*>
注:[0-9]+表示它是一个大于等于0的数,.*表示可以出现任意多个空格
例2,美国的股票代码是1到5个字母组成,使用正则表达式
[a-zA-Z]{1,5}
注:使用大括号{m,n}表示前面紧邻元素重复的次数在m到n次
Escape
转义
1,定义
在匹配的文本中可能需要匹配点,问号,斜杠,括号等字符,但是这些字符却是正则表达式的元字符,因此使用转义来表示
2,使用
例1,匹配出可能带有小数点的美元,使用正则表达式
\$[0-9]+(\.[0-9]+)?
注:由于可能带有小数点,因此小数点后面需要元字符"?"。由于"."是一个元字符,因此需要加上反斜杠来转义,表示这里应该匹配的是个点,而不是任意字符