正则表达式使用
1
2
3
4
小写  a-z
大写 A-Z
汉字 \u4E00-\u9FA5
数字 \u0030-\u0039

正则表达式”[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
2
\\[+[a-z]+\\]  
\\[em\\d{4}\\] //QQEmoji

(7).查找字符串中的话题 #iOS开发#

1
#([^\\#|]+)#

下面是JavaScript示例代码,利用CoderRunner可以实时编写测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var str = "Thisis a Box! 价格2(¥3.15) 1223#呵呵呵#[偷笑]啊哈[哈哈] https://segmentfault.com/a/ 262 [嘻嘻]";
var numberRex = new RegExp("\\d+");//匹配数字 +表示至少一位
var emoji= new RegExp("\\[[0-9a-zA-Z\\u4e00-\\u9fa5]+\\]");// 表情的规则--汉子+字母+数字组成
var emoji2= new RegExp("\\[+[a-z]+\\]");// 表情的规则--[cool] 里面为纯字母
var atPattern= new RegExp("@[0-9a-zA-Z\\u4e00-\\u9fa5]+");// @的规则
var topicPattern= new RegExp("#[0-9a-zA-Z\\u4e00-\\u9fa5]+#");// #话题#的规则
var urlPattern = new RegExp("\\b(([\\w-]+://?|www[.])[^\\s()<>]+(?:\\([\\w\\d]+\\)|([^[:punct:]\\s]|/)))");// url链接的规则
var userName = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,15}$");// (由6-16位字母数字下划线组成,第一位不能为数字或下划线)
var passWorld = new RegExp("^(?![0-9]{0,24})[\\S]{6,24}$");// ( 6-24位,不能为纯数字,不能包含空格)
var phoneNum = new RegExp("^1[3|4|5|7|8][0-9]{9}$");// (1开头3,4,5,7,8区分运营商,由于变动较快,限制适当放宽点) 等同^1[3|4|5|7|8][0-9]\\d{8}$
var phoneNum2 = new RegExp("^1[3|4|5|7|8][0-9]\\d{8}$");//\d{8} 相当于[0-9]{8}
var phoneNum3 = new RegExp("^1[3|4|5|7|8]\\d{9}$");//所以可以精简为这个
var validateNum = new RegExp("^[0-9]+$");// 验证是否纯数字- ^表示开头 +表示至少1次 $表示结束

var Email1 = new RegExp("[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}");//用户名@邮箱网站.com 或 用户.名@邮箱网站.com.cn
var Email2 = new RegExp("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\.\\w+([-.]\\w+)*$");//利用元字符\w对上面正则简写
var IdCard = new RegExp("(^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$)|(^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])((\\d{4})|\\d{3}[Xx])$)");//匹配身份证号码
var price = new RegExp("¥(\\d+(?:\\.\\d+)?)");//匹配价格 只考虑人民币()表示子表达式 ¥3.15
console.log(str.match(numberRex));
//PS:元字符注意加转义符,正则表达式中'\d'可以看作元字符,或者元字符序列,是一个完整的整体;但是因为Object-C语言中‘\'已经有了它的特殊意义了,所以'\b'会被先转义,所以就无法得到正则表达式真正想要的内容。
工具

http://tool.oschina.net/regex

http://tool.lu/regex

正则网上内容基本一样,关键在于理解掌握,下面是一些比较好的教程。

参考:

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

http://www.infoq.com/cn/news/2011/01/regular-expressions-1

文章作者: kyren
文章链接: http://huluo666.github.io/2017/03/20/正则表达式使用/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Kyren's Blog