详解正则表达式

参考
最好的正则表达式教程

1. 正则表达式概念

正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。
他描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。



2. 正则语法

2.1 普通字符

普通字符包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。

[ABC]|[12] 匹配 [...] 中的所有字符,例如 [aeiou] 匹配字符串 "google runoob taobao" 中所有的 e o u a 字母。
[^ABC]     匹配除了 [...] 中字符的所有字符,例如 [^aeiou] 匹配字符串 "google runoob taobao" 中除了 e o u a 字母的所有字母。
[A-Z]      [A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字母。
.	   匹配除换行符(
、
)之外的任何单个字符,相等于 [^

]。
[sS]	   匹配所有。s 是匹配所有空白符,包括换行,S 非空白符,包括换行。
w	   匹配字母或数字或下划线或汉字 等价于 '[^A-Za-z0-9_]'。   W
d	   匹配数字                                             D
s         匹配任意的空白符                                      S

2.2 特殊字符









2.3 限定符

限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6种。

以下正则表达式匹配一个正整数,[1-9]设置第一个数字不是 0,[0-9]* 表示任意多个数字:

/[1-9][0-9]*/

设置 0~99 的两位数,可以使用下面的表达式来至少指定一位但至多两位数字。

/[0-9]{1,2}/

上面的表达式的缺点是,只能匹配两位数字,而且可以匹配 0、00、01、10 99 的章节编号仍只匹配开头两位数字
改进下,匹配 1~99 的正整数表达式如下:

/[1-9][0-9]?/
colou?r 可以匹配 color 或者 colour。? 问号代表前面的字符最多只可以出现一次(0次、或1次)。

/[1-9][0-9]{0,1}/

* 和 + 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配。









2.4 定位符

定位符使您能够将正则表达式固定到行首或行尾。它们还使您能够创建这样的正则表达式,这些正则表达式出现在一个单词内、在一个单词的开头或者一个单词的结尾。
定位符用来描述字符串或单词的边界。
^ 和 $ 分别指字符串的开始与结束。
 描述单词的前或后边界,B 表示非单词边界。


2.4 选择符

用圆括号 () 将所有选择项括起来,相邻的选择项之间用 | 分隔。

原文地址:https://www.cnblogs.com/itlihao/p/14282793.html