正则表达式

正则表达式是一些用来匹配和处理文本的字符串。正则表达式的两种基本用途:搜索和替换。
验证某个模式能不能获得预期的匹配效果并不困难,但是如何验证它不会匹配到你不想要的东西可就没那么简单。

1. 匹配单个字符

(1) 匹配纯文本
正则表达式可以包含纯文本,甚至可以只包含纯文本。
在 JavaScript 里.可选的 g(globla,全局),标志将返回者所有匹配的结果数组,可以用 i 标志来强制执行一次不区分字母大小写的搜索。
(2) 匹配任意字符
.字符可以匹配任何一个单个的字符(绝大多数的正则表达式实现里,.只能匹配除换行符以外的任何单个字符)。
(3) 匹配特殊字符
如果需要匹配特殊字符,需要在特殊字符前加一个 \。\是一个元字符(metacharacter,表示"这个字符有特殊函数,而不是字符本身含义")。

2. 匹配一组字符

(1) 匹配多个字符中的某一个
可以使用元字符 [ 和 ] 来定义一个字符集合。
(2) 利用字符集合区间
字符区间的首尾字符可以是 ASCELL 字符里的任意字符。
(3) 取非匹配
用元字符 ^ 来表明想对一个字符集合进行取非匹配。^ 的效果将作用于给定字符集合里的所有字符或字符区间,而不是仅限于紧跟在 ^ 字符后面的那一个字符或字符区间。

3. 使用元字符

(1) 对特殊字符进行转义
元字符是一些在正则表达式里有着特殊含义的字符。
任何一个元字符都可以通过给它加上一个反斜杠字符( \ )作为前缀的办法来转义。

(2) 匹配空白字符
元字符大致可以分为两种:一种是用来匹配文本的(比如.),另一种是正则表达式的语法所要求的(比如 [ 和 ] )。

元字符 说明
[\b] 回退(并删除)一个字符(Backspace键)
\f 换页符
\n 换行符
\r 回车符
\v 垂直制表符

(3) 匹配特定的字类别
一些常用的字符集合可以用特殊元字符来代替。这些元字符匹配的是某一类别的字符(术语称之为"字符类"),类元字构造出来的正则表达式简明易懂。

元字符 说明
\d 任何一个数字字符(等价于[0-9])
\D 任何一个非数字字符(等价于[^0-9])
\w 任何一个字母数字字符(大小写均可)或下划线字符(等价于[a-zA-Z0-9_])
\W 任何一个非字母数字或下划线字符(等价于[^a-zA-Z0-9_])
\s 任何一个空白字符(等价于[\f\f\r\t\v])
\S 任何一个非空白字符(等价于[^\f\n\r\t\v])

使用16进制值要用前缀\x,使用8进制值,要用前缀\0。

4. 重复匹配

(1) 匹配一个或多个字符
要想要匹配同一个字符(或字符集合)的多次重复,只要简单地给这个字符(或字符集合)加上一个 + 字符作为后缀。
(2) 匹配零个或多个字符
* 用法和 + 一样,但是可以匹配零个字符。
(3) 匹配零个或一个字符
? 只能匹配一个或零个字符
(4) 匹配的重复次数
设置重复次数用 { 和 } 字符来给出,把数值写在它们之间。{} 语法可以未重复匹配次数设定一个精确的值,也可以为重复匹配次数设定一个区间,也可以匹配至少重复多少次。
(5) 防止过度匹配
* + 都是”贪婪型“元字符,它们在进行匹配时的行为模式是多多益善而不是适可而止。会尽可能地从一段文本的开头一直匹配到这段文本的末尾。而不是从这段文本的开头匹配到碰到第一个匹配时为止。
”懒惰型“元字符是匹配尽量少的字符。“懒惰型”元字符的写法很简单,只要给贪婪型元字符加一个?后缀即可。

贪婪型元字符 懒惰型元字符
* *?
+ +?
{n,} {n,}?

5. 位置匹配

位置匹配用来解决在什么地发进行字符串匹配操作的问题。
(1) 单词边界
第一种边界是由限定符 \b 指定的单词边界。顾名思义,\b 用来匹配一个单词的开始和结尾。(b 是英文 boundary) 的首字母。如果想匹配一个完整的单词,就必须在想要匹配的文本的前后都加上 \b 限定符。
如果想表面不匹配一个单词边界(即字母数字下划线之间,或者非字母数字下划线之间),使用 \B。
(2) 字符串边界
一个用来定义字符串开头的 ^,另一个用来定义字符串结尾的 $。(?m) 启用分行匹配模式,就是一个能够改变其他元字符序列,在分行匹配模式下,^ 不仅匹配正常的字符串开头,还能匹配分割符(换行符)后面开始位置,$ 不仅匹配正常的字符串结尾,还将匹配行分隔符(换行符号)后面的结束位置。

6. 使用子表达式

子表达式是一个更大的表达式的一部分,把一个表达式划分为一系列表达式的目的是为了把那些子表达式当作一个独立元素来使用。子表达式必须用 ( 和 ) 括起来。
子表达式允许嵌套。

7. 回溯引用:前后一致匹配

(1) 回溯引用匹配
回溯应用指的是模式的后半部分引用在前半部分中定义的子表达式。
\1 表达的第一个子表达式,\2表达着第二个子表达式,以此类推。
(2) 回溯引用在替换操作中的应用
$1 表示第一个子表达式

8. 前后查找

(1) 向前查找
向前查找指定了一个必须匹配但不在结果返回的模式。一个向前查找模式是一个以 ?= 开头的子表达式,需要匹配的文本在 = 的后面。
(2) 向后查找
向后查找出现在被匹配文本之后的字符,但不消费它,向后查找操作符是 ?<= 。
(3) 对前后查找取非
负向前查找将向前查找不与给定模式想匹配的文本,负向后查找将向后查找不与给定模式匹配的文本。

操作符 说明
(?=) 正向前查找
(?!) 负向前查找
(?<=) 正向后查找
(?<!) 负向后查找

9. 嵌入条件

(1) 回溯引用条件
用来定义这种条件语法是 (?(backreference)true-regex),其中 ? 表明这是一个条件,括号里的 backreference 是一个回溯引用,true-regex 是一个只在 backreference 存在时才会被执行的子表达式。
(2) 前后查找条件
前后查找条件只在一个向前查找或向后查找操作取得成功的情况下才允许一个表达式被使用。语法上和回溯应用条件的语法大同小异,只需要把回溯引用(括号里的回溯引用编号)替换为一个完整的前后查找替换表达式即可。

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

推荐阅读更多精彩内容