本文不包括任何正则表达式的举例,只是对正则表达式的一些基础语法进行学习。希望通过阅读本文,能够达到读懂正则表达式,可以自己书写简单正则表达式的效果。
本文参考资源为《DEELX 正则表达式引擎》V1.2,手册下载地址为:CSDN资源-DEELX 正则表达式引擎
在此之前,一直感觉正则表达式是个很传奇的东西,尤其是使用到JS进行表单数据完整性验证的时候,很喜欢使用正则表达式。
以前在验证一个字符串是否是数字的时候,都喜欢用一些判断,又或者验证手机号码的时候,都喜欢自己写一些if、else语句。
比如说: ^[0-9]*[1-9][0-9]*$,表示的是正整数。当输入任何字符串或者负数、浮点数、符号的时候,验证都是不能通过的。
有比如说: ^[//w-]+(//.[//w-]+)*@[//w-]+(//.[//w-]+)+$,表示电子邮箱,当输入的字符串不符合电子邮箱的规则的时候,验证也是不能通过的。
很奇怪吧,这些奇怪的字符组合起来之后居然能够表达出如此之大的含义。好吧,现在我们来一起研究这些字符的含义都包含哪些。
数字表示:[0-9]
字母表示:[a-zA-Z]
简单的转义字符:
字符 | 说明 |
^ | 匹配输入字符串的开始位置。要匹配 "^" 字符本身,请使用 "/^" |
$ | 匹配输入字符串的结尾位置。要匹配 "$" 字符本身,请使用 "/$" |
( ) | 标记一个子表达式的开始和结束位置。要匹配小括号,请使用 "/(" 和 "/)" |
[ ] | 用来自定义能够匹配 '多种字符' 的表达式。要匹配中括号,请使用 "/[" 和 "/]" |
{ } | 修饰匹配次数的符号。要匹配大括号,请使用 "/{" 和 "/}" |
. | 匹配除了换行符(/n)以外的任意一个字符。要匹配小数点本身,请使用 "/." |
? | 修饰匹配次数为 0 次或 1 次。要匹配 "?" 字符本身,请使用 "/?" |
+ | 修饰匹配次数为至少 1 次。要匹配 "+" 字符本身,请使用 "/+" |
* | 修饰匹配次数为 0 次或任意次。要匹配 "*" 字符本身,请使用 "/*" |
| | 左右两边表达式之间 "或" 关系。匹配 "|" 本身,请使用 "/|" |
字符集合列表:
字符集合 | 说明 |
. | 小数点可以匹配除了换行符(/n)以外的任意一个字符 |
/w | 可以匹配任何一个字母或者数字或者下划线 |
/W | W大写,可以匹配任何一个字母或者数字或者下划线以外的字符 |
/s | 可以匹配空格、制表符、换页符等空白字符的其中任意一个 |
/S | S大写,可以匹配任何一个空白字符以外的字符 |
/d | 可以匹配任何一个 0~9 数字字符 |
/D | D大写,可以匹配任何一个非数字字符 |
匹配次数限定符:
限定符 | 说明 |
{n} | 表达式固定重复n次,比如:"/w{2}" 相当于 "/w/w" |
{m, n} | 表达式尽可能重复n次,至少重复m次:"ba{1,3}"可以匹配 "ba"或"baa"或"baaa" |
{m, } | 表达式尽可能的多匹配,至少重复m次:"/w/d{2,}"可以匹配 "a12","x456"... |
? | 表达式尽可能匹配1次,也可以不匹配,相当于 {0, 1} |
+ | 表达式尽可能的多匹配,至少匹配1次,相当于 {1, } |
* | 表达式尽可能的多匹配,最少可以不匹配,相当于 {0, } |
从上面我们可以自己定义一些简单的正则表达式
IP地址:[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}
字符串:^[A-Za-z]+$ //由26个英文字母组成的字符串
URL地址:^[a-zA-z]+://(/w+(-/w+)*)(/.(/w+(-/w+)*))*(/?/S*)?$
(其他一些常用的正则表达式,可以通过百度、google搜索得到,本文不做罗列。)
^[A-Za-z] 表示匹配有字母开始的字符串。假如12admin,那么匹配是不会通过的。
解读URL:
URL地址一般多是http,ftp,https等,以字母开头,并包含”://”;
那么:
“^[a-zA-z]+” :表示匹配字符串以字母开始,”+”出现一次或者多次.
“://”:属于必须的部分,标注协议与地址的分开
“(/w+(-/w+)*)”:以字母/数字/下划线开始,后面可包含多个字符。
“(/.(/w+(-/w+)*))*”:句点属于分隔符号,并且不以句点结尾
可匹配的URL格式包含:
http://www.baidu.com
http://www.google.com.cn
ftp://name
f://y
以上内容仅供参考。谢谢!