正则表达式

作者: yuzhiyi_宇 | 来源:发表于2018-07-07 18:20 被阅读0次

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

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) 前后查找条件
前后查找条件只在一个向前查找或向后查找操作取得成功的情况下才允许一个表达式被使用。语法上和回溯应用条件的语法大同小异,只需要把回溯引用(括号里的回溯引用编号)替换为一个完整的前后查找替换表达式即可。

相关文章

  • Linux命令行与Shell脚本编程大全-shell正则表达式

    本章内容: 定义正则表达式 了解基本正则表达式 扩展正则表达式 创建正则表达式 定义正则表达式 正则表达式是你定义...

  • 正则相关

    正则表达式基本语法 正则表达式常见字符 正则表达式特殊字符 正则表达式数量词 正则表达式边界匹配 正则表达式逻辑或...

  • 正则表达式系列-1

    正则表达式系列-1正则表达式系列-2正则表达式系列-3正则表达式系列-4 什么是正则表达式 正则表达式就是用事先定...

  • 正则表达式

    正则表达式 - 教程正则表达式 - 简介正则表达式 - 语法正则表达式 - 元字符正则表达式 - 运算符优先级正则...

  • Python基础入门 - 正则表达式与综合实战

    1. 初识正则表达式 1.1 介绍 步骤介绍正则表达式入门及应用正则表达式的进阶正则表达式案例 1.2 正则表达式...

  • Java正则表达式参考

    Java正则表达式入门 java正则表达式应用 深入浅出之正则表达式(一) 深入浅出之正则表达式(二) 正则表达式...

  • 正则表达式

    正则表达式 正则表达式就是记录文本规则的代码 正则表达式常用的元字符 正则表达式常用的限定符 正则表达式举例:这里...

  • Python爬虫(十)_正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • python正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • 正则表达式

    了解正则表达式基本语法 能够使用JavaScript的正则对象 正则表达式简介 什么是正则表达式 正则表达式:用于...

网友评论

    本文标题:正则表达式

    本文链接:https://www.haomeiwen.com/subject/kgfhuftx.html