什么是正则表达式?
正则表达式是用来描述某种规则字符的表达式。
正则表达式也叫匹配模式(pattern),它是由一组特定的字符串组成的,通常用来匹配和替换文本的。
正则表达式的规则
正则表达式的字符分为两种:
普通字符: 代表自己本身含义的字符
元字符: 代表某种特定规则的字符
元字符
. [] [a-z] [^]
" . " 代表匹配任意单个字符, 如:a或b或...
" [] " 代表匹配限定范围的单个字符,限定范围在中括号中,
如:[0123456789abcdefABCDEF]===>[0-9a-fA-F]
" [] " 中的 " - " 也是一个元字符,代表ASCII值连续的字符。
" [^] " 也代表一个字符组,但是是排除了后面字符的字符组。
eg1:
描述一个可以作为C语言标识的字符(下划线_ + 数字 + 大小写字母)
[_0-9a-zA-Z]
eg2:
[a-z]与 [^a-z]为互补关系
/d /D /w /W /s /S
\d 匹配 单个 十进制 数字字符
\d 等价于 [0-9]
\D 匹配 单个 非十进制 数字字符
\D 等价于 [^0-9]
\w word 匹配 字母或数字或下划线
\w 等价于 [_0-9a-zA-Z]
\W 匹配 非字母或数字或下划线
\W 等价于 [^_0-9a-zA-Z]
\s 匹配 空白字符(换行、回车、水平/垂直制表符、换页)
\s 等价于 [\n\r\t\v\f]
\S 匹配 非空白字符
\S 等价于 [^\n\r\t\v\f]
匹配多个字符
正则表达式除了匹配单个字符还可以匹配多个(不确定个数)字符
+ 匹配一个或者多个先前字符(或模式)
eg
09+ ===> 09 099 0999 09999....
[0-9]+ ===> 0 1 123 1234 ....
* 匹配0个或多个先前的字符(或模式)
eg
09* ===> 0 09 099 0999 09999....
[0-9]+ ===> ""空串 0 1 123 1234 ...
? 匹配0个或一个先前字符(或模式)
eg
9? ==> "" 9
[0-9]? ==> "" 0 1 2 3 ... 9
{数字} 匹配固定数字的字符(或模式)
eg
88[0-9]{3} ==> 88000 88111 88123
//88是必须匹配的、在0-9中匹配三次
{最小数目,最大数目}
匹配至少“最小数目”到“最大数目”的先前字符(或模式)
{最小数目,}
匹配至少“最小数目”,上不封顶的先前字符(或模式)
() 作为一个整体,子模式
eg
(abc){1,3} ===> abc abcabc abcabcabc
(|) 二选一
eg
(abc|123){2}
===>
abc123
abcabc
123123
123abc
注意这里|两边分别是作为一个整体
转义元字符
在上面用到了.*? 等元字符,但是在匹配时难免有用到的时候,这时需要将其转义为普通字符
\加上一个元字符 ==> 元字符就不是元字符而是一个普通字符
eg
\* \. \? \\等