让你少写代码的工具--正则表达式

让你少写代码的工具--正则表达式_第1张图片
文 | Yeaseon

什么是正则表达式

在编写处理字符串的程序或者网页时,经常会有查找符合某些复杂规则的需要。正则表达式就是描述这些规则的工具。
下面就将我这几天总结的一些知识点,分享给大家吧!

元字符

语法 说明
. 匹配除换行符以外的任意字符
\w 匹配字母、数字、下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束

字符转义

如果想要查找元字符本身,这时候就需要使用\来取消这些字符的特殊意义。 例如: google\.com匹配 google.comC:\\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开头的字符串

向后引用

在分组之后,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。

向后引用用于重复搜索前面某个分组匹配的文本。例如,\1代表分组1匹配的文本。

\b(\w+)\b\s+\1可以用来匹配重复的单词,像 go go或者 ha ha。
这个表达式可以分为几个部分:
第一部分就是\b(\w+)\b,在单词开始和结束之间有多于一个的字母和数字,这个单词就会被捕获到编号为1的分组中。
第二部分就是\s+,一个或者几个空白字符。
最后一部分就是\1,分组1中捕获的内容。

可能在分组组号上并不是那么人性化,我们也可以自定义子表达式的组名,指定组名的语法(?\w+)或者(?'Word'\w+),这样就可以把\w+的组名指定为Word了,要反向引用这个分组捕获的内容,也可以使用\k,所以上一个例子也可以写成\b(?\w+)\b\s+\k\b

语法 说明
(exp) 匹配exp,并捕获文本到自动命名的组里
(?exp) 匹配exp,并捕获文本到名称为name的分组里
?:exp 匹配exp,不捕获匹配的文本,也不给此分组分配组号

捕获分组常用语法

语法 说明
(exp) 匹配exp,并捕获文本到自动命名的组里
(?exp) 匹配exp,并捕获文本到名称为name的分组里
?:exp 匹配exp,不捕获匹配的文本,也不给此分组分配组号

以上就是我最近学习到的一些关于正则表达式的知识点,再有新的收获会更新此文章,感谢你的耐心观看。

喜欢这篇文章请点赞或收藏,如果想看到我的更多的文章,请关注我_

你可能感兴趣的:(让你少写代码的工具--正则表达式)