1 | 小写 a-z |
正则表达式”[a-zA-Z]+”代表什么含义?
a-z是所有小写字母 A-Z是所有大写字母
[a-zA-Z]+ 这个就是一个不分大小写字母的英文单词(无限字母) 最少是一个字母
表1.常用的元字符
| 代码 | 说明 |
|---|---|
. |
匹配除换行符以外的任意字符 |
\w |
匹配字母或数字或下划线或汉字 —-\W大写W匹配不是字母、数字、下划线的字符 |
\s |
匹配任意的空白符 等同于[\f\n\r\t\v]; |
| \d | 匹配数字 相当于[0-9] —– \D 匹配不是数字的字符 |
\b |
匹配单词的开始或结束 |
^ |
匹配字符串的开始 |
$ |
匹配字符串的结束 |
[ |
字符组的起始符号 |
如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这类特殊字符原本是字母,在表达特殊含义时需要用”"转义。
如:
| 元字符 | 说明 |
|---|---|
| * | 匹配* 字符 |
| . | 匹配. 字符 |
| / | 匹配 / 字符 |
| \ | 匹配 \ 字符 |
| [ | 匹配 [ 字符 |
| ] | 匹配 ] 字符 |
重复
你已经看过了前面的*,+,{2},{5,12}这几个匹配重复的方式了。下面是正则表达式中所有的限定符(指定数量的代码,例如*,{5,12}等):
表 2.常用的限定符(量词)
| 代码/语法 | 说明 |
|---|---|
* |
重复零次或更多次 相当于{0,} |
+ |
重复一次或更多次 相当于{1,} |
? |
重复0次或1次 相当于{0,}或{0,1} |
{n} |
重复 n 次 |
{n,} |
重复 n 次或更多次 |
{n,m} |
重复 n 到 m 次 |
表3.常用的反义代码
特殊字符串表达特殊的含义,如果要检测”*”等特殊字符,需要在前面加上\进行转义。
| 代码/语法 | 说明 |
|---|---|
| \W | 匹配任意不是字母,数字,下划线,汉字的字符 |
| \S | 匹配任意不是空白符的字符 |
| \D | 匹配任意非数字的字符 |
| \B | 匹配不是单词开头或结束的位置 |
| [^x] | 匹配除了x以外的任意字符 |
| [^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
| 特殊字符 | 含义 | 例子 |
|---|---|---|
| ^ | 表示字符串开头 | “^2”表示以2开始 |
| $ | 表示字符串的结尾,如果允许跨行检索,那么也表示行尾 | “2$”表示以2结尾 |
| [] | 中括号表达式,匹配中括号内的任意字符,在中括号的开头加上”^”表示补集 | [0-9a-zA-Z]表示\w,[^0-9a-zA-Z]表示\W |
| () | 表示将括号内分组并标记为子表达式,在开头加上”?:”表示仅分组不标记为子表达式。\2表示重复第二子表达式 | “(abc)\1”匹配”abcabc”,”(?:abc)”仅分组不编号 |
| | | 或,可以连续使用 | “x|y|z”匹配 x或 y或 z |
|---|---|---|
| {} | {n}重复前一个表达式 n次,{n,}少于 n次,{n,m}大于 n次小于 m次 | “\d{4}”匹配四个数字 |
锚点
锚点用于匹配一个位置,下列为常用的锚点
- ^ 起始的位置 /^http/(用在表达式的开头表示一个正则表达是的开始)
- $ 结尾的位置 /.jpg$/ (表示字符串的结尾)
- \b 单词边界 (匹配单词的开始或结束)
字符类
字符类用于匹配一类字符中的一个,下面为几个常用的例子,
- [abc] 可用于匹配 a b 还有 c
- [0-9] 可用于匹配一个数字
- [^0-9] 可用于匹配一个非数字
- [a-z] 可用于匹配一个字母
- . 任意字符但换行符除外
开发常用正则示例详解:
(1).用户名
规则—1.字母开头(第一位字母) —[a-zA-Z] 表示第一位为字母 ;
2.后面几位为数字或下划线—-[a-zA-Z0-9] 表示字符为字母数字或者下滑线;
3.位数限制6-16位—{5,15} 表示有5到15个符合[a-zA-Z0-9]的字符
1 | ^[a-zA-Z][a-zA-Z0-9_]{5,15}$ |
(2).密码
(?![0-9]{0,24}$) 表示前24位不能全为数字
\S 表示任何非空白字符(不为空格,回车,tab等输入的空白符)
[\S]{6,24} 表示6到24位不为空格的字符
1 | "^(?![0-9]{0,24})[\S]{6,24}$" |
(3).手机号
1 表示第一位为1
[3|4|5|7|8] 表示第二位为 3,4,5,6,7,或者8
[0-9]{9} 表示9位任意数字
1 | ^13|4|5|7|8{9}$ |
(4).email
(格式 用户名@邮箱网站.com 或 用户.名@邮箱网站.com.cn )
[a-zA-Z0-9_-]+ 表示1位或多位字母数字下划线和连接符
(.[a-zA-Z0-9_-]+)* 表示 0个或多个 由一个点.和一个或多个字母数字下划线连接符组成的字符串
1 | ^[a-zA-Z0-9-]+(.[a-zA-Z0-9-]+)*@[a-zA-Z0-9_-]+.com(.cn)?$ |
(5).查找字符串中的数字
this is num 185cm
1 | \\d+ |
(6).查找字符串中的Emoji
1 | \\[+[a-z]+\\] |
(7).查找字符串中的话题 #iOS开发#
1 | #([^\\#|]+)# |
下面是JavaScript示例代码,利用CoderRunner可以实时编写测试
1 | var str = "Thisis a Box! 价格2(¥3.15) 1223#呵呵呵#[偷笑]啊哈[哈哈] https://segmentfault.com/a/ 262 [嘻嘻]"; |
工具
正则网上内容基本一样,关键在于理解掌握,下面是一些比较好的教程。
参考:
http://www.ctolib.com/topics-102627.html
http://www.ctolib.com/topics-34117.html
https://www.zybuluo.com/demonly/note/443320
https://yq.aliyun.com/ziliao/99994?spm=5176.8246799.0.0.tuxn2y