标签:结果 操作 应该 header 正则表达 转义 pre body 顺序
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。下面来介绍一些基本的规则
首先有两个特殊的符号^
和$
,他们分别表示一个字符串的开始和结束:
^The
:表示所有以“The”开始的字符串pair$
:表示所有以“pair”结尾的字符串^ab$
:表示开头和结尾都是abnotice
:表示任何包含"notice"的字符串*
、+
、?
表示一个或一系列字符重复出现的次数,它们分别表示“0个、1个或若干”,“1个或若干”还有“0个或1个”。
ab*
:表示一个字符串有一个a,后面跟着0个或者若干个b -> a,ab,abbbbb......ab+
:表示一个字符串有一个a,后面跟着至少一个b或者更多ab?
:表示一个字符串有一个a,后面跟着0个b或者1个b -> a,aba?b+$
:表示在字符串末尾有0个a或者1个a,后面跟着至少1个b{}
大括号表示次数的范围
ab{2}
:表示有1个a和2个bab{2,}
:表示有1个a和至少2个bab{3,5}
:表示有1个a和3到5个b必须指定范围的下限,上限可以忽略
|
表示或操作
hi|hello
:表示字符串中有"hi"或"hello"(a|b)*c
:表示一串"a"、"b"混合的字符串后面有一个c.
可以替代任何字符
a.[0-9]
:表示有1个a后面跟着一个任意字符和一个数字^.{3}$
:表示有任意三个字符的字符串[]
方括号表示某些字符串允许在一个字符串中的某一特定位置出现
[ab]
:表示有1个a或者1个b[a-d]
:表示一个字符串包含小写的a到d中的一个^[a-zA-Z]
:表示以一个字母开头,[a-zA-Z0-9]
:表示一个字符串以一个逗号后面跟着一个字母或数字结束[^]
可以在方括号中使用^表示不希望出现的字符,要放在方括号的第一位
%[^a-zA-Z]%
:表示两个百分号中不应该出现字母\
转义符
\
可以避免这种匹配\b
:匹配单词的开始或者结束,单词边界\w
:匹配字母或数字或下划线或汉字,等价[A-Za-z0-9_]
\s
:匹配任意的空白符\d
:匹配数字\f
:匹配换页符\r
:匹配回车符\n
:匹配换行符\t
:匹配水平制表符以上都是小写字母,如果是大写字母,匹配内容就是相反的。例如\s
匹配空白符,\S
匹配除空白符外的所有字符。
正则表达式从左到右进行计算,并遵循优先级顺序。
相同优先级从左到右进行运算,不同优先级的运算先高后低。
下表从高到低说明了优先级顺序:
运算符 | 描述 |
---|---|
\ | 转义符 |
(), (?:), (?=), [] | 圆括号和方括号 |
*, +, ?, {n}, {n,}, {n,m} | 限定符 |
^, $, \任何元字符、任何字符 | 定位点和序列(即:位置和顺序) |
| | 替换,"或"操作 |
正向或反向预查都是非获取匹配,不进行存储供以后使用。
测试的文本:
Java6 Java7
正向预查
(?:pattern)
匹配结果。Java(?:6|7)等效于Java6|Java7,结果Java6 Java7
(?=pattern)
正向匹配。Java(?=6),匹配后面跟着6的Java,即第一个Java,结果Java6 Java7
(?!pattern)
正向不匹配。Java(?!6),匹配后面不跟着6的Java,即第二个Java,结果Java6 Java7
反向预查
(?<=pattern)
反向匹配。(?<=J)a,匹配紧跟字母J后面的a,结果Java6 Java7
(?<!pattern)
反向不匹配。(?<!J)a,不匹配紧跟字母J后面的a,结果Java6 Java7
最后附上 正则表达式手册
标签:结果 操作 应该 header 正则表达 转义 pre body 顺序
原文地址:https://www.cnblogs.com/yisany/p/10432351.html