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

文 | 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[^>]+> 匹配<>括起来以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,不捕获匹配的文本,也不给此分组分配组号

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 正则表达式到底是什么东西?字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等...
    狮子挽歌阅读 6,473评论 0 9
  • 注:本篇文章只为方便查看,特此保留,如有冒犯,敬请谅解!!! 本文目标 30分钟内让你明白正则表达式是什么,并对它...
    阿杰Alex阅读 5,334评论 0 10
  • 转载自正则表达式30分钟入门教程 入门 学习正则表达式的最好方法是从例子开始,理解例子之后再自己对例子进行修改,实...
    夏天的风_song阅读 5,734评论 0 0
  • http://www.jb51.net/tools/zhengze.html 正则表达式30分钟入门教程 版本:v...
    nullleaf阅读 3,723评论 0 2
  • 简介/声明 为什么要写此文呢?稍微有点Web基础的同学应该都知道网页的表单大多都要做表单验证。而正则表达式正好可以...
    Airmole阅读 5,589评论 4 21