正则表达式是程序员的神技
1、正则表达式的作用
正则表达式天生就有一种让人毛骨悚然的感觉,看起来还无逻辑,事实真的是这样吗?
正则表达式最开始是用来描述神经系统的,是一种数学模型的表达式,后来被引入IT行业。
1.1、正则表达式的三个作用:
1.这称为数据验证。可以测试字符串是否包含正则表达式描述的模型。
2.字符串修改。我们可以在待修改的字符串中找到所有符合正则表达式模型的部分,并且删除或者修改成指定的内容。
3.数据提取。我们可以在带提取的字符串中找到正则表达式模型表示的部分,并且将其提取出来
正则表达式的这三个作用在生物学中就有了,可以找到特定结构的神经结构,并且生物大神们可以结合机器就神经结构进行提取,修改。
现在这些作用都使用到了IT上了。
1.2、正则表达式和IDE的Ctrl+F的故事:
几乎100%的IED都会有Ctrl+F功能,可以找到文件中所有指定的内容,并且可以选择替换成特定的文本,这些都是正则做的。
2、计算机世界的正则表达式
正则表达式有3种类型,不同的计算机语言、软件支持不同的正则表达
式。并且,基于正则表达式,编程语言的不同函数具有不同的功能。
比如数据验证,内容提取、内容修改等。
2.1、正则表达式分类
既然正则表达式3种类型,那么我们就要了解这3钟类型的正则表达式是怎么回事,在具体的编程语言或者软件的时候,就可以方便使用了。
分类如下:
1、基本的正则表达式(Basic Regular Expression 又叫 Basic RegEx 简称 BREs)
2、扩展的正则表达式(Extended Regular Expression 又叫 Extended RegEx 简称 EREs)
3、Perl 的正则表达式(Perl Regular Expression 又叫 Perl RegEx 简称 PREs)
4、高级正则表达式 ARE。
BRE和ERE到底有什么区别?其实仅仅是元字符的不同,在BRE方式中,只承认^ 、$、 . 、[ 、] 、*这些是元字符
,所有其他的字符都被识别为文字字符
。而ERE中,则添加了(、 ) 、{ 、} 、?、 + |、等元字符
(及其相关功能)
对于(、)、?、+、|,BRE和ERE区别如下:
(1)BRE:
默认情况下(、)、?、+、|都只是普通字符,在其前面加反斜杠\就变成元字符。
\(\)
\?
\+
\|
(2)ERE:
任何元符号前面加上反斜杠反会使其被当作文字字符来处理。
\$表示$
\^表示^
\\表示\
PHP支持ERE,那么我们只要知道PHP的元字符有哪些,就可以方便编写正则表达式了。
POSIX基本正则表达式和扩展正则表达式的比较
BRE与ERE的差异
正则表达式说明
2.2、正则表达式组成
正则表达式包含以下部分:
界定符
原子
量词
边界控制
模式单元
修正符 i、I、g、G、s、S等
2.2.1、界定符
界定符/:正则表达式的界定符 /表示正则表达式开始和结束都是用 / 表示
例子:
/0-9/
表示数字 0 到 9
/a-z/
表示小写的a-z
2.2.2、原子
原子分为可见原子、不可见原子。
原子也可以称为文字字符
。
可见原子:
数字0-9
字符a-z,A-Z
还有其他一切可以看见的字符,包括语言符号
不可见原子:
制表符 \t
空格
换行 \n
其他看不见的符号
2.2.3、元字符
元字符(Metacharacter)是拥有特殊含义的字符:
是常用元字符的总结:
. 匹配除换行符之外的任意单个的字符 [^\n],JavaScript中是-
\d 匹配任意一个十进制数字[0-9]
\D 匹配任意一个非十进制数字[^0-9]
\s 匹配一个不可见原子
\S 匹配一个可见原子
\w 匹配任意一个数字,字母,或下滑线 [0-9A-Za-z_]
\W 匹配任意一个非数字,字母,或下滑线 [0-9A-Za-z_]
原子的筛选方式:
abc|123 匹配 abc或者123,和(abc)|123表达式是一样的含义
[abcd] abcd中的任意一个
[^abcd] 表示除了a,b,c,d以外的任何字符
[0-9a-zA-Z] 匹配 0-9 z-a A-Z中的任意一个字符。也可以写[0-3a-sA-F]这样的
2.2.4、量词
? 零次或者一次
+ 至少出现一次
* 任意次
{n} 表示前面的原子恰好出现n次
{n,} 表示前面的原子至少出现n次
{n,m} 表示前面的原子出现n次到m此之间,含第n 和m次
2.2.5、边界控制
^ 必须以前面的原子或者原子集合开始
$ 必须以前面的原子或者原子集合结束
2.2.6、模式单元
模式单元是(),作用是里面是一个子正则
3、在线工具