正则表达式就是根据你定义的模式模板进行模式匹配的一种技术,由字面文本和具有特殊意义的符号组成。下面介绍下主要规则:
一、位置标记
- ^,这个表示匹配字符串的开始位置
- $,这个表示匹配字符串的结束位置
二、标识符
- A字符,表示必须匹配A字符
- . 这个点表示匹配任意一个字符,包括空字符,但有且只能必须匹配一个
- [ ],中括号内可以是一个字符组或字符范围,[0-9]表示单个数字,[ab]表示匹配a或者b
- [^],括号中的字符表示非,即不匹配括号中的任意一个字符
三、数量修饰符
- ?,表示匹配一次或0次
- +,表示匹配一次或多次
- *,表示匹配0次或多次
- {n},表示匹配n次
- {n,},表示至少匹配n次
- {n,m},表示最小匹配n次,最多匹配m次
四、其他
- (),圆括号的内容视为一个整体,一般用在模式替换中
- |,类似编程语言用的或运算,制定一种选择结构,可以匹配两边的任何一项
- \,转义字符,如果字符串中包括上述的特殊字符,那么就需要这个符号来转义
示例一:匹配任意单词
分析:单词一般以空格开头,空格或者标点符号结尾,单词中包括大小写字母
表达式:
( +[a-zA-Z]+[?.,]? +)
备注:第一个和最后一个+符号前面都有一个空格,表示匹配一个或多个空格。
示例二:匹配IP地址
分析:IP地址分为四组数字中间用“.”分开,数字最少一位,最多三位
表达式:
[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
备注:这里有个缺陷,一般的IP地址的取值范围再0到255之间,上面的表达式会匹配非法的字符
示例三:解析邮件地址
分析:username@hostname.com邮件地址一般类似与这个格式,其中username由字母、数字、下划线、点号、加号、破折号,hostname中包含字母、数字、点号、下划线,最后的定于域名只能是字母,长度一般是二到五位
表达式:
^([0-9a-zA-Z_\-\.\+]+)@([0-9a-zA-Z_\.]+)\.([a-zA-Z]{2,5})$
备注:^和$是锚字符,表示匹配的开始和结束的位置,其他的按照@和.分成三个部分就能很好理解这个表达式了
正则表达式的基本组成元素就是那些字符,关键就是如果根据自己的需求来组合这些基本元素,多看看多练练,不同的语言的表达式略微有差异,但是一些基本的锚字符,标识符,数量修饰符都一样,比如这里的[0-9]表示数字,[[:digit:]]也表示数字,JS中的正则表达式中“\d”表示数字。
菜鸟手书,欢迎指正!