什么是正则表达式
在编写处理字符串的程序或者网页时,经常会有查找符合某些复杂规则的需要。正则表达式就是描述这些规则的工具。
下面就将我这几天总结的一些知识点,分享给大家吧!
元字符
语法 | 说明 |
---|---|
. |
匹配除换行符以外的任意字符 |
\w |
匹配字母、数字、下划线或汉字 |
\s |
匹配任意的空白符 |
\d |
匹配数字 |
\b |
匹配单词的开始或结束 |
^ |
匹配字符串的开始 |
$ |
匹配字符串的结束 |
字符转义
如果想要查找元字符本身,这时候就需要使用\
来取消这些字符的特殊意义。 例如: google\.com
匹配 google.com ,C:\\Windows
匹配 C:\Windows 。
重复
语法 | 说明 |
---|---|
* |
重复任意次(可能为0) |
+ |
重复一次或更多次 |
? |
重复零次或一次 |
{n} |
重复n次 |
{n,} |
重复n次或更多次 |
{n,m} |
重复n到m次 |
字符类
有时候我们需要匹配一些字符集合,应该怎么办?
很简单,我们需要在[]
里列出它们就好,像[aeiou]
就匹配任何一个英文原因字母。
我们也可以轻松指定一个字符范围,像[0-9]
代表的含义与\d
就是完全一致的:任意一个数字。
分枝条件
正则表达式里的分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|
把不同的规则分隔开。
0\d{2}-\d{8}|0\d{3}-\d{7}
这个表达式能匹配两种以连字符分隔的电话号码:一种是三位区号,8位本地号(010-12345678),另一种是4位区号,7位本地号(0376-1234567)。
分组
如果需要重复多个字符,可以使用()
来指定子表达式(也叫做分组),然后你就可以指定这个子表达式进行其他一些操作。
(\d{1,3}\.){3}\d{1,3}
是一个简单的IP地址匹配表达式。来按顺序分析一下:\d{1,3}
匹配1到3个数字,(\d{1,3}\.)
匹配1到3个数字加上一个.
这个整体重复3次,最后再加上一个1到3位的数字。
反义
语法 | 说明 |
---|---|
\W |
匹配任意不是字母、数字、下划线或者汉字的字符 |
\S |
匹配任意不是空白符的字符 |
\D |
匹配任意非数字的字符 |
\B |
匹配不是单词开头或结束的位置 |
[^x] |
匹配除了x 以外的任意字符 |
[^aeiou] |
匹配除了aeiou 这几个字母以外的任意字符 |
例子:
-
\S+
匹配不包含空白符的字符串 -
<a[^>]+>
匹配<>括起来以a开头的字符串
向后引用
在分组之后,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。
向后引用用于重复搜索前面某个分组匹配的文本。例如,\1
代表分组1匹配的文本。
\b(\w+)\b\s+\1
可以用来匹配重复的单词,像 go go或者 ha ha。
这个表达式可以分为几个部分:
第一部分就是\b(\w+)\b
,在单词开始和结束之间有多于一个的字母和数字,这个单词就会被捕获到编号为1的分组中。
第二部分就是\s+
,一个或者几个空白字符。
最后一部分就是\1
,分组1中捕获的内容。
可能在分组组号上并不是那么人性化,我们也可以自定义子表达式的组名,指定组名的语法(?<Word>\w+)
或者(?'Word'\w+)
,这样就可以把\w+
的组名指定为Word
了,要反向引用这个分组捕获的内容,也可以使用\k<Word>
,所以上一个例子也可以写成\b(?<Word>\w+)\b\s+\k<Word>\b
。
语法 | 说明 |
---|---|
(exp) |
匹配exp ,并捕获文本到自动命名的组里 |
(?<name>exp) |
匹配exp ,并捕获文本到名称为name 的分组里 |
?:exp |
匹配exp ,不捕获匹配的文本,也不给此分组分配组号 |
捕获分组常用语法
语法 | 说明 |
---|---|
(exp) |
匹配exp ,并捕获文本到自动命名的组里 |
(?<name>exp) |
匹配exp ,并捕获文本到名称为name 的分组里 |
?:exp |
匹配exp ,不捕获匹配的文本,也不给此分组分配组号 |
以上就是我最近学习到的一些关于正则表达式的知识点,再有新的收获会更新此文章,感谢你的耐心观看。
喜欢这篇文章请点赞或收藏,如果想看到我的更多的文章,请关注我_