前言
正则除了匹配 字符外,也可以匹配位置,位置即字符之间的间隔,如'it',的i和t之间即是一个位
表现形式
^:开头
$:结尾
\b:单词边界(\w与\W、\w与^或$之间)
\B:对\b取反
(?=l):先行断言
(?!l):先行否定断言
如果将it按位置拆分,则为''+i+''+'t'+''
^表示第一个位置,即i前边的引号表示的位置
^a,表示以a开头,即第一个位置后的字符是a
与^概念差不多,只不过他表示最后一个位置
匹配\w与\W、\w与^、\w与$之间的位置
不匹配任何东西
分析:
^匹配开头的位置,那如果强制让开头的位置去匹配一个字符,不就永远匹配不到了!
不能使用[^.]来表示排除任意一个,因为在[]中的.相当于是被转译过的,并不代表任何字符
结果:
数字的千位分隔符表示法
输入:
'12345678'
分析:
使用\d{3}匹配三位数字
我们要的是其前一个位置,故使用先行断言,找到'1'+''+'2'+''+'3'+''+'4'中1和2中间的位置,即(?=\b{3})
找出所有组的前一个位置:(?=(\d{3})+)
匹配到结尾:$能匹配结尾,但是会判断前一个字符,故使用+\b或*\b更好
结果:
输入:
'123456789'
分析:
上一步我们找出了所有三位一组的位置,这其中包含了以123为一组的前一个位置,该位置即\b,故排除(\B或(?!\b))即可
数字、大小写字母组成6-12位密码串,且至少要包含其中两种
分析:
使用[\da-zA-Z]{6,12}标识合法的输入值和长度
以某一种类型(数字)作为出发点,从头到结束位置找到符合要求的字符的前一个位置
以数值作为出发点:.*\d
从头开始:.^
其前一个位置:(?=.*\d)
最后,以第二步找到的位置作为起始点,看其后的字符是否符合要求
正则表达式简介
正则表达式(regular expression,在代码中常简写为regex、regexp或RE),又称正规表示式、正規表示法、正規運算式、規則運算式、常規表示法,是计算机科学的一个概念。
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如 表达式“ab+” 描述的特征是“一个 'a' 和 任意个 'b' ”,那么 'ab', 'abb', 'abbbbbbbbbb' 都符合这个特征。
正则表达式的历史
正则表达式的“鼻祖”或许可一直追溯到科学家对人类神经系统工作原理的早期研究。
美国新泽西州的Warren McCulloch和出生在美国底特律的Walter Pitts这两位神经生理方面的科学家,研究出了一种用数学方式来描述神经网络的新方法,他们创造性地将神经系统中的神经元描述成了小而简单的自动控制元,从而作出了一项伟大的工作革新。
在1951 年,一位名叫Stephen Kleene的数学科学家,他在Warren McCulloch和Walter Pitts早期工作的基础之上,发表了一篇题目是《神经网事件的表示法》的论文,利用称之为正则集合的数学符号来描述此模型,引入了正则表达式的概念。正则表达式被作为用来描述其称之为“正则集的代数”的一种表达式,因而采用了“正则表达式”这个术语。
之后一段时间,人们发现可以将这一工作成果应用于其他方面。
Ken Thompson就把这一成果应用于计算搜索算法的一些早期研究,Ken Thompson是 Unix的主要发明人,也就是大名鼎鼎的Unix之父。Unix之父将此符号系统引入编辑器QED,然后是Unix上的编辑器ed,并最终引入grep。Jeffrey Friedl 在其著作《Mastering Regular Expressions (2nd edition)》(中文版译作:精通正则表达式,已出到第三版)中对此作了进一步阐述讲解,如果你希望更多了解正则表达式理论和历史,推荐大家这本书。