《精通正则表达式》学习笔记

前端之家收集整理的这篇文章主要介绍了《精通正则表达式》学习笔记前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1.正则表达式是强大、高效、便捷的文本处理工具;

2.正则表达式由两种字符构成:元字符文字

3. ^ 脱字符,代表一行的开始;

$ 美元符号,代表一行的结束;

4.普通字符都有“接下来是”的意思,如abc,相当于: aand then band then c;(前提是在字符组以外)

5. [ ] 字符组

5.1 匹配若干字符之一 [....] 内部表示希望匹配的字符;

在字符组[ ]内部,元字符'-'(连字符)表示一个范围;例: H[1-6]与H[123456]是一样的;

只有在字符组内部且不是在字符组的开头,连字符才是元字符,否则只是普通的字符。

分析: ^cat$、^$、^
^cat$ :行开头,然后是cat,然后是行末尾;意思是只包含cat的行;
^$ :行开头,然后是行结尾。意思是空行;
^ :无意义,因为每一行都有行开头,所以所有行都能匹配;

5.2 排除型字符组

[^...] 匹配任何未列出的字符;字符组中开头的^表示“排除”;

在字符组外部,^表示一个行锚点,但在字符组内部且位于字符组的开头时,^就是一个元字符;

记住排除型字符组表示“匹配一个未列出的字符”,而不是“不要匹配列出的字符”

一个字符组,即使是排除型字符组,也需要匹配一个字符!

元字符在字符组里面和外面的意义是不一样的,元字符的定义规则是不一样的。

6.用点号.匹配单个任意字符

元字符 . (dot)在字符组外面是用来匹配任意单个字符的。

7.多选结构

|,元字符“或”;例:gr[ea]y,还可以写作 grey|gray,或gr(a|e)y

()括号用来划定多选结构的范围.(正常情况下括号也是元字符)

8.字符组基本上可以算是一门独立的微型语言(例如对于元字符,它有自己的规定),而多选结构是“正则表达式语言主体”的一部分。

9.忽略大小写

-i :参数规定在匹配时不区分大小写

10.单词分界符

“元字符序列” \<\>,可以使用它们来匹配单词分界的位置。它们是单词版的^和$,分别用来匹配单词的开头和结束位置。

单词的分界如下图示例:

11.可选项元素

元字符 ?代表可选项。把它加在一个元素(一个字符或括号中的内容)的后面,就表示这个元素可以出现也可以不出现。区间量词表示:{0,1}

例:用colou?r 匹配color或colour;或用4(th)?代替4th|4

12.其它量词:重复出现

元字符 + 表示“之前紧邻的元素出现一次或多次”;区间量词表示:{1,}

元字符 * 表示“之前紧邻的元素出现任意多次,或者不出现”;区间量词表示:{0,}

?、+、* 这3个元字符,统称为量词,它们限制了所有作用元素的匹配次数

? : 0或1 次
+ : ≥1次
* :≥0次


13.规定重现次数的范围:区间

使用元字符序列来自定义重现次数的区间: ...{min,max}

表示的次数是:min≤ 次数≤ max ;这称之为“区间量词”。问号对应的区间量词是{0,1}

14.括号及反向引用

反向引用是正则表达式的特性之一,它容许我们匹配与表达式先前部分匹配的同样的文本。

在第一个表达式中我们可以使用多个括号,再用\1、\2、\3等来表示第一、第二、第三组括号匹配的文本(而不是括号内的那个范围)。

比如在([a-z])([0-9])\1\2中如果[a-z]匹配的是“the”,则\1就代表“the”,而不是说\1代表[a-z]。

15.使用转义符“反斜线” \ 可以匹配本身是元字符的字符,此法适用于所有的元字符,不过在字符组内部无效

16.匹配包含字母、数字、下划线 但不能以数字开头的变量明: [a-zA-Z_][a-zA-Z_0-9]*

匹配引号内的字符串:"[^"]*"

17.正则(regex)

子表达式:通常指括号内的表达式或分号分隔的多选分支。严格说来每个字符都算子表达式。


II.入门实例拓展

1.非捕获型括号:(?:...),表示只分组不捕获

\b 在正则表达式中是匹配一个单词分界符的,但在字符组中,它匹配一个退格符。Perl使用\b代表/<或/>

\s 能表示所有表示“空白字符”的字符组,其中包括空格符、制表符、换行符和回车符

/..../ 斜线用来标注正则表达式的边界,它们本身不属于正则表达式。

2.Perl和其它流派的正则表达式提供的简记法:

\t 制表符

\n 换行符

\r 回车符

\s 任何“空白”字符

\S 除了“空白”字符之外的任何字符

\w [a-zA-Z0-9],\w+可用来匹配一个单词

\W [^a-zA-Z0-9]

\d [0-9]

\D [^0-9]

3. .* 通常用来表示“一组任何字符”

Perl以及其它语言都把数字、字母和下划线当作单词的一部分。

4.环视结构不匹配任何字符,只匹配文本中的特定位置。

顺序环视(从左至右):

肯定型顺序环视:(?=...) 子表达式能够匹配右侧文本

否定型顺序环视:(?!...) 子表达式能够匹配右侧文本

逆序环视(从右至左):(JavaScript不支持逆序环视)

肯定逆序环视:(?<= ...) 子表达式能够匹配左侧文本

否定逆序环视:(?<! ...)子表达式能够匹配左侧文本

猜你在找的正则表达式相关文章