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

文 | 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,不捕获匹配的文本,也不给此分组分配组号

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容

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