正则笔记
位置匹配:
- \b 代表单词的边界 (\bhi\b)查找hi
- ^ 代表字符串的开头
- $ 代表字符串的结束
^\d{5,12}$表示,这个字串的开头和末尾都要符合\d{5,12}的规则
匹配数量:
-
- 表示()之前的字符可以使用任意次()
所以(.)组合可以匹配很长的一段字符串
- {N}表示({N})之前的字符重复N次
所以(\d{2})组合可以匹配2个连续数字
-
- 和*类似,但表示(+)之前的字符可以使用 >=1 次
- ? 表示(?)之前的字符重复0或1次
单字符匹配:
- .匹配除了换行之外的任何字符
- \d 数字匹配
- \s 匹配空白字符,想tab,空格,换行之类的
- \w 匹配字母,数字或者下划线,应该指的是程序字符(非空白字符)
- [] 匹配([])中的任意项,如[abcd.?!]匹配(a,b,c,d,.,?,!)之一
也可以这样写[a-z0-9A-Z]表示 a-z, 0-9, A-Z 之间的闭区间
-————反义—————
- \W 非\W的字符
- \S 非\s的字符 eg: \S+ 匹配一段字符串
- \D 非\d的字符
- \B 非边界位置
- [^X] 非X以外的任意字符 eg: <[^>]>匹配<>号之间的内容
- [^backd] 非b,a,c,k,d之外的任意字符
多字符匹配:
1.()在()内指定子表达式,然后可以作为单个元字符看待。
(\d{1,3}.){3}\d(1,3) = 匹配IP地址
元字符转意:
1.有时候需要匹配元字符本身,那么就只能用()来做转意了.eg:*
分支条件:
分组(子表达式):
- ()在()内指定子表达式,然后可以作为单个元字符看待。
(\d{1,3}.){3}\d(1,3) = 匹配IP地址
- (?) 或者 (?'name') 可以指定组名,向后引用 \\N 表示对第N组的引用,
\\K 就可以向后引用这个分组了.
- (exp) 匹配 exp 并捕获 (字符匹配)
- (?:exp) 匹配但不捕获文本 (字符匹配)
- (?=exp) 匹配exp前面的位置(位置匹配)
- (?<=exp) 匹配exp后面的位置 (位置匹配)
- (?!exp) 匹配后面跟的不是exp的位置 (位置匹配)
- (?<!exp) 匹配前面不是exp的位置 (位置匹配)
贪婪与懒惰:
? 匹配最少的字符 eg: aabab exp:a.*?b 匹配 aab 反之:匹配 aabab
注释:
(?# comment)
nTop
17 April 2014