正则表达式——基础
1.正则表达式怎么运作
定义或描述一个字符串匹配的模式(pattern),并以此模式来匹配其他字符串中符合条件的子串。
2.正则匹配的语法规则
Ⅰ.字符匹配
-
string
匹配固定的普通字符串直接保留字符串原样即可:
'abc'
来匹配'abc'
。 -
|
表示用**“或”**来连接两个正则表达式ab|cd
,用来匹配ab
或cd
。 -
[...]
匹配一个字符组中的任意字符①
[abc]
来匹配a
、b
或c
;②
[^...]
则相反,匹配字符组以外的任意字符,如[^abc]
匹配1
、_
或d
等[abc
]以外的字符。 -
\b
匹配单词的边界(左边界或右边界)①
na\b
可以匹配china
的na
或nation
的na
,但不能匹配dianat
中的na
;②
\B
则相反,匹配不作为单词边界的字符,如in\B
匹配china
中的in
。 -
\d
匹配数字①
\d
来匹配0-9之间的任何数字,等价于[0-9]
;②
\D
则相反,匹配数字以外的任意字符。 -
\w
匹配字母、数字和下划线①
\w
来匹配字母、数字和下划线,等价于[A-Za-z0-9_]
;②
\W
则相反,匹配字母、数字及下划线以外的任意字符。 -
\s
匹配任何空白字符(不可见字符)\S
则相反,匹配可见字符。 -
.
匹配换行符以外的所有字符即:使用
(.|\n)
即可匹配所有字符。 -
^
匹配字符串的开头^ch
匹配china
的ch
,而不匹配branch
的ch
。 -
$
匹配字符串的结尾ch$
匹配branch
的ch
,而不匹配china
的ch
; -
使用
\
来转义特殊字符①如使用
\n
来匹配换行符、\t
匹配制表符,\\
匹配\
;②此外,
[]
内的特殊字符将失去意义,只表示它的字符本身,如[.]
不再能匹配换行符以外的所有字符,而是匹配.
字符本身。
Ⅱ.量词
-
量词(也叫限定符)
字符 作用 备注 *
重复 零次 或 更多次 相当于{0,}:任意个 +
重复 一次 或 更多次 相当于{1,}:至少一个 ?
重复 零次 或 一次 相当于{0,1}:最多一个 {n}
重复 n次 {n, }
重复 n次 或 更多次 {n, m}
重复 n次 到 m次 (ab){3}
来匹配ababab
(cd){1,2}
来匹配cd
或cdcd
-
两种重要的特殊匹配(借助量词的组合构成)
字符 作用 .* 贪婪匹配(以尽可能长的长度来匹配满足条件的子串) .*? 惰性匹配(以尽可能短的长度来匹配满足条件的子串) 接下来对比两者,假设待匹配的字符串为:
"I am a sentence who knows itself a sentence"
;贪婪匹配
(I.*sentence)
,返回:I am a sentence who knows itself a sentence
;(匹配到了最后一个sentence
)惰性匹配
(I.*?sentence)
,返回:I am a sentence
。(只匹配到第一个sentence
)
Ⅲ.修饰符
在正则表达式之外书写修饰符(将正则表达式写在
//
之中)如
/ABCdef/i
:表示在匹配ABCdef
时忽略大小写
常见的修饰符:
名称 | 意义 | 描述 |
---|---|---|
i | ignore-忽略大小写 | 匹配时忽略大小写 |
g | global-全局匹配 | 匹配字符串中的所有符合的子串 |
m | multi line-多行匹配 | 当使用了^ 或$ 后,使用m 修饰符开启多行匹配模式可以让^ 和$ 去匹配每一行的开头或结尾;否则^ 和$ 只会去匹配整个字符串的开头或结尾 |
s | / | 让. 现在能够匹配换行符\n |