标签:下划线 解决问题 source 公众号 color 特征 例子 描述 tar
本文的目的不仅是教会读者怎么使用正则表达式。更希望通过学习正则表达式的案例,让读者感受一种不同的思维方式。鱼亦渔亦水,谁知道呢,我在扯淡,你要不要看?
正则表达式是描述一组字符串特征的模式,用来匹配特定的字符串。--Ken Thompson
这句话中提到了两点:
匹配特定字符串就是正则表达式要解决的问题域。
怎么解决的呢?通过描述一组字符串特征的方式来匹配。
举个例子:
www.ly.com
我们通常是这样去描述的:3w.ly.com
这里我们把连续的多个w,用位数简述了(对应位区间的概念,后面会详细讲解)。这就是正则表达式解决问题的思路。
正则表达式:
w{3}.ly.com
再比如,怎么描述一个正整数呢?
首位是1-9的数字,其余位为0到9。其余位位数是0到无穷。
这里我们把首位字符的可能性罗列了出来。把其余位位数用一个可能性区间描述。
正则表达式:
[1-9][0-9]{0,}
至此,我们感性认识了正则表达式。下面将正式带领大家认识这个“描述字符串特征的模式”。
什么是字符串呢?一串字符呗。本着化繁为简的常规架构手法(分而治之),可以想到描述一组字符串特征的问题,可以拆解为:
比如,上面正整数的例子[1-9]描述了字符特征,{0,}描述了0到无穷的一个位区间。
这里我们需要声明或重申几个概念:
我们使用[ ]表示。如下:
[Aa]:描述一个字符可能是A或a中的一个。
A=[A]
当描述的字符取值只有一种可能时,我们通常用字面量A代替。
[1-5]=[1,2,3,4,5]
当描述的字符取值的可能性是连续时,我们通常用-简写。
逻辑符号
|
逻辑“或”
^
逻辑“取反”
抽象
\d=[0123456789]
\w=[A-Za-z0-9_]
\s=[ \f\n\r\t\v]
\D=^\d
\W=^\w
\S=^\s
.
正则中的object
我们使用{}标识。如下:
{3,5}:描述3到5位。
{2,}:描述2到无穷位。
{0,3}:描述0到3位。
简写
边界符不描述字符,而是描述字符串中的位置。
分组符是解决另一个问题。在我们选择出某个字符串后,我们在替换结果里使用其中的一部分(子模式)。
我们把这种,先选择后使用的过程叫做后引用。
其中分组符,就是用来解决子模式切割的。
替换时,$0:是匹配的整个字符串。
$1:是捕获的第一个子模式(从前到后遇到的第一个捕获分组起始符)
依次类推,$n:是捕获的第n个子模式。
下面给三个例子:
例1:
例2:
例3:
\
怎么描述被正则表达式占用的关键字符呢?
转义。
例如:\.描述.
关注公众号“架构思维修炼”,输入关键字“正则表达式图解”,获取高清脑图。
标签:下划线 解决问题 source 公众号 color 特征 例子 描述 tar
原文地址:https://www.cnblogs.com/hanzhaoxin/p/9107605.html