正则表达式学习
正则表达式
一、正则表达式是什么
正则表达式(Regular Expression)是一种文本模式,使用单个字符串来描述、匹配一系列某个句法规则的字符串。正则表达式由普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")组成。
本文只对正则表达式的一些基本使用做说明,在开发过程中掌握基本使用足矣。
二、正则表达式能做什么
简单来说,就是做“模式匹配”。例如匹配符合某种规则的电话号码,匹配一定规则限制的数字等。
三、正则表达式的语法
正则表达式通过将常用的普通字符(大写和小写字母、所有数字、所有标点符号和一些其他符号)与元字符按照一定规则组合,形成多种多样的文本表达式,去匹配文本。
3.1 普通字符
普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。
3.2 特殊字符
特殊字符|描述
---|:--😐---😐
$|匹配输入字符串的结尾
()|匹配一个子表达式的开始和结束位置
*|匹配前面的子表达式0次或多次
+|匹配前面的子表达式1次或多次
.|匹配除换行符\n之外的所有字符
[|标记一个中括号表达式的开始
?|匹配前面的子表达式0次或1次
||将下一个字符标记为或特殊字符,或原义字符,如\n将n标记为换行符,\将\标记为原义字符
^|匹配输入字符串的开始位置,在[]中使用时表示不接受该方括号Ne表达式的字符集合
{|标记限定符的开始
||指明两项中有一个选择,是“或”的关系
以上字符,若需要匹配其原义字符,在其前面加“\”
“()”,“[]”,“{}”三者的区别:
()是为了提取匹配的字符串,表达式中有几个()就有几个相应的匹配字符串。“\s*”表示连续空格的字符串。
[]定义了匹配的字符范围。比如[a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字(只匹配字符集合的一个)。[\s*]表示空格或者*号。
{}一般用来表示匹配的长度,比如\s{3}表示匹配3个空格,\s{n,m}表示匹配n到m个空格,还可以用{n,}表示匹配至少n次
3.3 定位符
除了^、$外,还有两个定位符
字符|描述
---|:--😐---😐
\b|匹配一个单词边界,即字与空格之间的位置
\B|非单词边界匹配
注意:不要将限定符和定位符一起使用,如^*
3.4 运算符优先级
运算符|描述
---|:--😐---😐
||转义符
(), (?=), []|圆括号和方括号
*, +, ?, {n}, {n,}, {n,m}|限定符
^, $, \任何元字符、任何字符|定位点和序列(即:位置和顺序)
||替换,"或"操作.字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。
3.5 一个简单的例子
匹配一串金额数字,要求:整数位不超过15位,小数位不超过3位,金额可正可负
分析:要么为整数(正数或负数),要么为纯小数,要么为大于1的小数。注意,金额首位不能为0,当金额为0时,只能表示为0,0.00,0.000。
^(-?[1-9][0-9]{0,14})|([0]\.\d{1,2})|(-?[1-9][0-9]{0,14})(\.\d{1,2})$
正则表达式学习资源
- 菜鸟教程
- 一个可视化的正则表达式生成网页:https://jex.im/regulex