正则表达式
1、介绍
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
2、特殊字符
所谓特殊字符,就是一些有特殊含义的字符, 比如:*字符它表示任何字符串的意思。如果要查找字符串中的 * 符号,则需要对 * 进行转义,即在其前加一个\斜杠,\*。
特别字符 | 描述 |
---|---|
$ | 匹配输入行尾。 |
^ | 匹配输入字行首。 |
\ | 将下一个字符标记符、或一个向后引用、或一个八进制转义。 例如,“\\n”匹配\n。“\n”匹配换行符。 |
| | 将两个匹配条件进行逻辑“或”(or)运算。 |
() | 将( 和 ) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到 一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到\9 的符号来引用。 |
{ | 标记限定符表(数量词)达式的开始。 |
[ | 标记一个中括号表达式的开始。 |
特殊字符小知识点:
1. ()代表组也可以叫分组,什么是分组,是什么时候用到分组呢?
a、什么是分组:()里面的是一个子表达式是一个整体,()内的规则只对内有效,括号外的规则作用于整个()。
比如:do(es)?,这里表示可看做:d、o、es三个组合在一起,其中es是一个整体,?只作用(es)整体,
不单作用s也不作用d和o。
b、什么时候用分组:匹配相同范围内的不同值。例如:需要同时匹配gmail、163、sina的邮箱地址。gmail、
163、sina他们都是属于邮箱的后缀。
表达式:\w{4,20}@(gmail|163|sina)\.com :单词字符4-20个,一个@,gmail、163、sina
分组中任意一个,最后一个.com。
如果在这里不加上(),\w{4,20}@gmail|163|sina\.com,那么|的范围不在是()分组内,
而是整个表达式。sina\.com被看做一个整体。
2. \num 引用分组中的内容
当我们需要匹配相同内容时,分组为了我提供了一个中方便的引用方式\num。
例如:<A>柠檬班</A>,<A>和</A>A内容是一样的,所以可以使用\num来改进。
<([a-zA-Z]*)>[\u4e00-\u9fa5]+</\1>:([a-zA-Z]*)是第一个组,\1就能引用,
所以</\1>相当于</([a-zA-Z]*)>
3、限定符(数量词)
字符 | 描述 |
---|---|
* | 匹配前面的子表达式任意次。例如,zo* 能匹配“za”,也能匹配“zo”以及“zoo”。*等价于{0,}。 |
+ | 匹配前面的子表达式至少一次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "za"。+ 等价于 {1,}。 |
? | 匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”。?等价于{0,1}。 |
{n} | n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。 |
{n,} | n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。请注意在逗号和两个数之间不能有空格。 |
数量词小知识点:
数量词匹配的是前面的子表达式,那么什么是子表达式呢?
比如:zo*,星号作用的只有o单个字符,和z没有任何关系。所以zo*匹配的是:一个z和任意个o。
比如:do(es)?,问号作用的(es)这个分组,所以do(es)?匹配的是:一个d和一个o和零个和一个es。
4、预定义字符类
字符 | 描述 |
---|---|
\d | 数字:[0-9] |
\D | 非数字: [ ^ 0-9] |
\s | 空白字符:[ \t\n\x0B\f\r] |
\S | 非空白字符:[ ^ \s] |
\w | 单词字符:[a-zA-Z_0-9] |
\W | 非单词字符:[ ^\w] |
. | 匹配除“\n”和"\r"之外的任何单个字符。 |
欢迎来到testingpai.com!
注册 关于