在上一篇文章中主要简单介绍了正则中很基础的内容,一些简单的匹配,今天则在之前的基础上加了点东西,但其实也是我们掌握正则所必须学会的基础部分。
首先我们先来看一下正则中的简写字符集:
上面表格中都是正则表达式中一些常用正则的简写形式,方便我们使用时书写,也便于记忆。
前后关联约束
1.前置约束存在和前置约束排除:(?=…) 和 (?!…)
通俗点说就是对指定格式的前面的元素进行约束,前者是匹配到的元素后面跟着指定格式,后者是匹配到的元素后面不是跟着指定格式。结合例子可能更好理解:
"ar(?=\s)" 表示匹配 ar 字符串后面跟着的是空格。
Regularexpressions are a deep language.
"ar(?!\s)" 表示匹配 ar 字符串后面跟着的不是空格。
Regular expressionsare a deep language.
上面两个正则都是对匹配到的 ar 字符串进行约束,前者是跟着的是空格,后者跟着的不是空格;前者约束存在,书写格式为 (?=…),后者约束不存在,书写格式为 (?!…)。
2.后置约束存在和后置约束排除:(?
和上面的相对应,对指定格式的后面的元素进行约束,前者是匹配到的元素前面跟着指定格式,后者是匹配到的元素前面不是跟着指定格式。同样结合例子理解:
"(?
Regular expressionsare a deep language.
"(?
Regularexpressions are a deep language.
上面两个正则同样都是对匹配到的 ar 字符串进行约束,前者的前面要是空格,后者的前面要不是空格,同样的前者约束存在,书写格式为 (?
标志
标志也叫修饰语, 它是用来修改表达式的搜索结果. 这些标志可以任意的组合使用, 它也是正则表达式的一部分,常用的标志有三种:g,i,m,分别表示全局搜索,忽略大小写,多行匹配。
1.全局搜索 g
"ar" 匹配结果如下:
Regularexpressions are a deep language.
"ar/g" 匹配结果如下:
Regularexpressionsare a deep language.
上面两者的区别在于第一个是只搜索匹配到的第一个结果,第二个是全局搜索,将所有匹配的结果全部搜索出来。
2.忽略大小写 i
"Reg" 匹配结果如下:
Regular expressions are a deep language.
"REG/i" 匹配结果如下:
Regular expressions are a deep language.
上面两者的区别在于第一个是只搜索字符完全匹配的结果,第二个是搜索忽略大小写的匹配结果。
3.多行匹配 m
"^Reg/g" 匹配结果如下:
Regular expressions are a deep language,
Regular expressions are a deep language,
Regular expressions are a deep language.
"^Reg/gm" 匹配结果如下:
Regular expressions are a deep language,
Regular expressions are a deep language,
Regular expressions are a deep language.
这样一对比两者的区别其实就已经出来了,第一个是全局搜索匹配到的结果,匹配的是第一行的开头,而第二个也是全局搜索匹配到的结果,只不过它是匹配每一行的开头。
以上就是正则表达式的一些基础运用,有了这些基础,然后在平常开发中积极去尝试写出一些稍微复杂的正则,加强练习,不然看完之后过一段时间就忘了,只有不断练习,慢慢的才会对正则有点感觉。这些正则的基础也是我在 github 上找到一个关于学习正则的项目,然后通过这个项目的学习所掌握的,下面就是这个项目的地址:
https://github.com/zeeshanu/learn-regex
常用正则表达式
励志成为一名菜鸟码农,共勉!
领取专属 10元无门槛券
私享最新 技术干货