正则表达式

正则表达式

元字符

\b

代表着单词的开头或结尾,也就是单词的分界处。

"This is Regex"
"\bis\b"  //只想匹配“is”这个单词,This中的“is”不匹配

.

匹配除了换行符以外的任何字符

*

重复零次或更多

.*//任意数量的不包含换行的字符

\d

匹配一个数字

\d\d //匹配2个数字
\d{8} //匹配8个数字

\w

匹配字母,数字,下划线或汉字

\s

匹配空格

[abc]

匹配包含括号内元素的字符

[a-z]//匹配a至z的所以字母

^

会匹配行或者字符串的起始位置,有时还会匹配整个文档的起始位置。

$

会匹配行或字符串的结尾

^\d{5,12}$ //QQ号必须为5位到12位数字

元字符反义

"\W" 		匹配任意不是字母,数字,下划线 的字符
"\S" 		匹配任意不是空白符的字符
"\D"		匹配任意非数字的字符
"\B"		匹配不是单词开头或结束的位置
"[^abc]"	匹配除了abc以外的任意字符

字符转义

要查找元字符相关的要加"\"

\. //匹配.
\* //匹配*

量词

"*"(贪婪)	重复零次或更多
"+"(懒惰)	重复一次或更多次
"?"(占有)	重复零次或一次
"{n}"		重复n次
"{n,m}"  	重复n到m次
"{n,}"  	重复n次或更多次

分枝条件

|

相当于或的意思

分组

()

就是这个条件使用多少次

(\d{1,3}\.){3}\d{1,3} //匹配IP地址

捕获分组

其实就是一个括号内的内容

后向引用

如果后而有相同的内容则可以直接引用前面定义的捕获组,以简化表达式

(\d)\d\1//这里的"\1"就是对"(\d)"的后向引用

"zery zery" 正则 \b(\w+)\b\s\1\b 所以这里的"\1"所捕获到的字符也是 与(\w+)一样的"zery",为了让组名更有意义,组名是可以自定义名字的
"\b(?<name>\w+)\b\s\k<name>\b" 用"?<name>"就可以自定义组名了而要后向引用组时要记得写成 "\k<name>";自定义组名后,捕获组中匹配到的值就会保存在定义的组名里
"(exp)"    匹配exp,并捕获文本到自动命名的组里
"(?<name>exp)"   匹配exp,并捕获文本到名称为name的组里
"(?:exp)"  匹配exp,不捕获匹配的文本,也不给此分组分配组号

零宽断言

"(?=exp)"  匹配exp前面的位置

  如 "How are you doing" 正则"(?<txt>.+(?=ing))" 这里取ing前所有的字符,并定义了一个捕获分组名字为 "txt" 而"txt"这个组里的值为"How are you do";

"(?<=exp)"  匹配exp后面的位置

  如 "How are you doing" 正则"(?<txt>(?<=How).+)" 这里取"How"之后所有的字符,并定义了一个捕获分组名字为 "txt" 而"txt"这个组里的值为" are you doing";

"(?!exp)"  匹配后面跟的不是exp的位置

  如 "123abc" 正则 "\d{3}(?!\d)"匹配3位数字后非数字的结果

"(?<!exp)"  匹配前面不是exp的位置

  如 "abc123 " 正则 "(?<![0-9])123" 匹配"123"前面是非数字的结果也可写成"(?!<\d)123"

相关推荐