正则表达式

1. 正则表达式

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。

1.1 正则表达式符号

1.1.1 符号类

通用的符号:

符号含义范例
.任意字符“A”, “ ”(空格), “囧”, “1”
d匹配一个数字字符。等价于[0-9]“1”, “2”, “3”
D匹配一个非数字字符。等价于[^0-9]“a”, “b”, “c”
w匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”“Y”, “x”, “_”, “9”
W匹配任何非单词字符。等价于“[^A-Za-z0-9_]”“ ”(空格)
s匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ fnrtv]“ ”(空格), “r”, “t”, “n”
S匹配任何非空白字符。等价于[^fnrtv]“B”, “囧”, “5”

特殊的符号:

符号含义范例
r匹配一个回车符。等价于x0d和cM 
f匹配一个换页符。等价于x0c和cL 
n匹配一个换行符。等价于x0a和cJ 
t匹配一个制表符。等价于x09和cI 
\\匹配“”
xhh以ASCII码进⾏匹配x41可以匹配”A”
uhhhh以UNICODE码进⾏匹配u4e00-u9fa5 中⽂的范围

重点:关于 .

单行模式下(gs):能匹配\n
多行模式下(gm):不能匹配 \n

1.1.2 字符集合

符号含义
[a-z]字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符
[abc]字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”
[^xyz]负值字符集合。匹配未包含的任意字符。例如,“1”可以匹配“plain”中的“p”
[^a-c]负值字符范围。匹配任何不在指定范围内的任意字符。例如,“2”可以匹配任何不在“a”到“z”范围内的任意字符
[\-]匹配 “-”

1.1.3 字符边界

符号含义
^匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“n”或“r”之后的位置
&匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“n”或“r”之前的位置
\b匹配一个单词边界,也就是指单词和空格间的位置。例如,“erb”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”
\B匹配非单词边界。“erB”能匹配“verb”中的“er”,但不能匹配“never”中的“er”

1.1.4 数量界定符

符号定义
x{n}n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o
x{n,}n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”
x{n,m}m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格
x*匹配前面的子表达式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等价于{0,}
x+匹配前面的子表达式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}
x?匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“does”或“does”中的“do”。?等价于{0,1}

重点:关于 ?

贪婪模式下:数量限定符都是在满⾜条件下尽可能的匹配更多的字符
非贪婪模式下:如果希望在满⾜条件下尽可能少的匹配字符, 在数量限定符后⾯加上“?”

1.1.5 分支条件

符号定义
x\y匹配x或y。例如,“z\food”能匹配“z”或“food”。“(z\f)ood”则匹配“zood”或“food”。

1.1.6 分组与后向引⽤

符号定义
(x)匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用“(”或“)”
1..n引⽤第1-n组匹配
(?:x)匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用或字符“()”来组合一个模式的各个部分是很有用。例如“industr(?:yies)”就是一个比“industryindustries”更简略的表达式

1.1.7 断⾔

符号定义
(?=pattern)正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=9598NT2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
(?!pattern)正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如“Windows(?!9598NT2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
(?<=pattern)反向肯定预查,与正向肯定预查类拟,只是方向相反。例如,“(?<=9598NT2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”
(?<!pattern)反向否定预查,与正向否定预查类拟,只是方向相反。例如“(?<!9598NT2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”

1.2 正则表达式网站

以下是常用的一些在线正则表达式测试工具,其中个人感觉第一个最好!

  1. http://regex101.com/
  2. http://regexr.com/
  3. http://tool.lu/regex/
  4. http://tool.oschina.net/regex/
  5. http://tool.chinaz.com/regex/

1.3 正则表达式工具

  1. RegexBuddy
  2. RegexMagic

1.4 常用的正则表达式

需求正则表达式
用户名^[a-z0-9_-]{3,16}$
密码^[a-z0-9_-]{6,18}$
十六进制值^#?([a-f0-9]{6}[a-f0-9]{3})$
电子邮箱^([a-z0-9_.-]+)@([da-z.-]+).([a-z.]{2,6})$/
URL^(https?://)?([da-z.-]+).([a-z.]{2,6})([/w .-]*)*/?$
IP 地址/((2[0-4]d25[0-5][01]?dd?).){3}(2[0-4]d25[0-5][01]?dd?)/
/^(?:(?:25[0-5]20-4[01]?0-9?).){3}(?:25[0-5]20-4[01]?0-9?)$/</div> 
HTML 标签^<([a-z]+)([^<]+)*(?:>(.*)</1>s+/>)$
删除代码\注释(?<!http:S)//.*$
Unicode编码中的汉字范围^[u2E80-u9FFF]+$
一个单词连续出现的位置b([a-z]+) 1b/gi
匹配空行^s*$
匹配中文字符[u4e00-u9fa5]
匹配双字节字符(包括汉字在内)[^x00-xff]
匹配空白行ns*r
匹配国内电话号码d{3}-d{8}d{4}-{7,8}
匹配腾讯QQ号1-9{4,}
匹配中国邮政编码[1-9]d{5}(?!d)
匹配18位身份证号^(d{6})(d{4})(d{2})(d{2})(d{3})([0-9]X)$
匹配(年-月-日)格式日期([0-9]{3}[1-9]
匹配正浮点数^[1-9]d*.d*0.d*[1-9]d*$
匹配负浮点数^-[1-9]d*.d*-0.d*[1-9]d*$
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值