小白的正则入门

概述

正则做为一种元语言工具内置在各类编程语言中,特别适合文本处理、数据验证等领域。
其优势是代码短小表现力巨大,缺点是难于阅读难于理解几乎没法调试。
我做为一个小菜鸟,但愿可以摸清正则的门路,顺利记住一些常见的正则需求而没必要每次都上网求助。如下是在js实现的正则环境下。html

认识字符

想要本身构造正则解决需求必先学会模仿,而模仿必先认识。
面对一串长长的正则符号,咱们第一个目的是认识其中每一个符号的表达意思,特别是有些符号不止一个字符要知道其是怎么组合的。
很重要一点,正则是从左往右解读的。linux

肯定正则范围

在 / / 之间的是正则表达式,第二个/以后的是模式
你直接第一眼看上去就是 第一个/和最后一个/ 以肯定正则的范围正则表达式

转义

所以若是要用 / 你必须转义,我相信你明白转义的意思即 前面加\造成表达 \/,
固然其余你须要表达的元字符均可以用 \来转义,
so,what is 元字符?
简单理解就是被用作正则表达式语法的字符,
比如html中你要 写 \< 就必须转义,只不过html转义方式是换成[实体字符](http://www.w3school.com.cn/tags/html_ref_symbols.html)罢了。

注意:\不表明都是转义字符,诸如\n等都是元字符,想要匹配\n则要\\n

模式

模式只有3种,可多用编程

g 表示 global全局
i 表示 ignore case 忽略大小写
m 表示 multiline 多行
gi 表示 全局忽略大小写
依次类推编程语言

不少文本工具的正则不要求你写后面的模式是由于他们通常直接默认gim工具

理解什么是全局g

不加g 匹配到一个就结束,加g则一直匹配到结尾调试

正则经常使用符号分类

符号的具体含义不太理解不要紧,毕竟咱们第一次用,且不须要记住全部符号啊,咱们的目标是拿下经常使用的,多见几回就明白了code

Anchor:匹配位置而非字符regexp

^    一行或一个串的起始位置
$    一行或一个串的结束位置
\b   匹配一个字边界,即字与空格间的位置。
\B   匹配与\b相反的位置

Character class:匹配特殊字符集,预约义了一些字符集给你用,你也能够本身构造htm

.   匹配除了换行符以外的全部字符
\s  匹配空白符
\S  匹配非空白符
\w  至关于匹配[A-Za-z0-9_],即全部大小写字母,数字,underscore(连字符_).//注意不是-
\W  与\w正好相反
\d  数字
\D  非数字

插一句,空白符包括换页、换行、回车、制表(tab是其中一种)

范围:这个应该隶属匹配字符集的Character class,但感受分开来说比较好

[A-Z]  表示A到Z范围内均可以匹配,跟数学中的用法一致
[AZ]   表示A、Z都行
[^AZ]  表示既不是A也不是Z //这是^的第二种用法了,不过别担忧,表示反义它必须在[]里

Escaped(转义):

简单理解就是被用作正则表达式语法的字符须要转义,但我的感受跟多靠积累

先看看菜鸟正则语法非打印字符那部分

记得js中的\uxxxx这种形式吧,这是转义某种unicode字符,具体什么字符要查表,
另外还有\000这种以八进制开头的与\xFF这种16进制的均可以表示一样的东西,
这三者可以表示全部实体符号,且能互换使用。

\cx  匹配由x指明的控制字符,x必须[A-Za-z]
好比 \cI  表示tab,等价\t
 \cM      表示回车,等价\r
 \cJ      表示换行,等价\n

不得不跳出来讲说win与linux环境下的行尾了,CRLF即rn是在win下,而linux是LF。这也是为何linux下写代码复制到win下换行都不见了的缘由。

group and lookaround

这部分比较难,

Groups allow you to combine a sequence of tokens to operate on them together. Capture groups can be referenced by a backreference and accessed separately in the results.
Lookaround lets you match a group without including it in the result.

请再去菜鸟语法看看试着理解上面那段鸟语的意思。

(ABC)  造成一个子串再进行运算
\1     反向引用
剩下感受用处不大

反向引用用法

Example

正则: (\w)a\1
源: hah dad bad dab gag gab
结果: hah dad gag
解释: 这个串匹配三个字符,第一个\w的意思看上面,a就是字母a,\1表示引用第一个匹配到子串;因此最终应该是 BAB这种形式,或者 abcacb这种则会把cac标红.

重复/限定符

正则运算符优先级

认识完符号和一些基本的注意点(转义、反向引用、范围、从左到右解读)后,看看

资源安利


未完待续....

相关文章
相关标签/搜索