美文网首页
掌握正则表达式(2)基础篇(一)

掌握正则表达式(2)基础篇(一)

作者: redexpress | 来源:发表于2018-04-07 14:32 被阅读42次

参考

这是我讲述正则表达式的“教案”,你也可以用来作为正则表达式手册。

正则表达式

1. 基本字符

说明:本文在表述正则表达式时,用方框扩起来的字符(示例:x)表示具体的字符,而不用方框扩起来的字符,表示一类字符,比如用“x”表示一个字符,并不一定是x

正则表达式 匹配 说明
x 字符x 匹配一个字符,区分大小写,示例:a匹配字符aA匹配字符A7匹配字符7

注意:编程语言的正则表达式默认是区分大小写的,而编辑器默认不区分大小写。

基本字符能直接匹配,有些字符为特殊字符,在正则表达式里有特殊意义,不能直接匹配。比如.并不是匹配.而是可以匹配多个字符。正则表达式里一个字符可以表示多种意义,比如7可以匹配字符7,在不同的位置,也可以有其它意义。这些在后文都会讲到。

2. 转义字符

说明:本文在表述正则表达式时,用方框扩起来的字符(示例:x)表示具体的字符,而不用方框扩起来的字符,表示一类字符,比如用“x”表示一个字符,并不一定是x

正则表达式 匹配 说明
x 字符x 匹配一个字符,区分大小写,示例:a匹配字符aA匹配字符A7匹配字符7
\\ 字符\
\0nnn 一个字符的ASCII码是八进制值nnn \0开头,最多3位8进制,示例:\0101匹配字符A\09表示Tab键
\xhh 一个字符的ASCII码是十六进制值hh \x开头,最多2位16进制,示例:\04E\04e匹配字符N
\t tab字符 等同\x09
\n 换行符 等同\x0a
\r 回车符 等同\x0d
\a 响铃符 等同\x07
\e escape字符 等同\x1b

重要说明:字符串内反斜杠\ 在常见的编程语言里都要转义"\\",而正则表达式里斜杠也要转义。就存在两次转义的问题。

比如正则表达式"\\\\"在编程语言里匹配字符\,因为四个反斜杠"\\\\"在字符串内,其实只表示两个反斜杠,正则表达式两个反斜杠表示字符\

Python编程语言的r字符串不需要转义,re.match(r'\\', '\\') 等同re.match('\\\\', '\\')学习正则表达式比较方便。

上面表格内并没有包括所有转义字符,后文会继续补充。

3.匹配多次

正则表达式a表示匹配字符a,如果要匹配字符aa,用正表达式aa,如果匹配100个a呢,可以用a{100},更多情况见下表

正则表达式 匹配 说明
x{n,m} n到m个x字符 n和m为自然数,m≥n
x{n,} n个以上x字符
x{n} n个x字符 等价{n,n}
x+ 1个以上x字符 等价x{1,}
x? 0个或1个x字符 等价x{0,1}
x* 0个或多个x字符 等价x{0,}

上面的表格出现了几个新的字符{},+?*

其中{},如果不是用作范围限定符,在不引起混淆的情况下可不转义,可以直接匹配这些字符。但要匹配这些字符本身+?*就要转义。如下表:

正则表达式 匹配 说明
\} } 不引起混淆的情况可不转义
\{ } 不引起混淆的情况可不转义
\, , 不引起混淆的情况可不转义
\+ +
\? ?
\* *

4. 正则表达式的流派(flavor)

类Unix操作系统的很多命令是支持正则表达式的,比如grep命令。

我们在macOS终端输入下面的命令:

echo aaaa|grep 'a{4}'

并不能够匹配。

改成这样:

echo aaaa|grep 'a\{4\}'

就可以匹配。

这是什么原因呢?这是因为grep命令的正则表达式花括号表示的意义和上文所讲的是相反的。即:}表示字符本身,用作范围符号需要转义\}

同一个正则表达式在不同的工具、编程语言表示的意义不同,这种现象叫做正则表达式的流派问题。

这个教程是什么流派呢?Perl 5流派,Perl 5.0版出现的早,而且正则表达式支持强大,很多编程语言实现都以此标准。

正则表达式的流派问题,会导致你在一个环境测试通过的正则表达式,在另一个环境可能不适用。所以移植正则表达式时一定要充分测试。

相关文章

掌握正则表达式(1)工具篇

相关文章

  • 掌握正则表达式(2)基础篇(一)

    参考 这是我讲述正则表达式的“教案”,你也可以用来作为正则表达式手册。 正则表达式 1. 基本字符 说明:本文在表...

  • 正则表达式

    1 正则表达式 2 元字符介绍 3 BRE 和 ERE 1 BRE(基础正则表达式) 2 ERE (扩展正则表达式...

  • awesome frontEnd

    1.JS基础篇1:数据类型(8种) 2.JS基础:正则表达式 3.带你彻底弄懂Event Loop 4.js 深拷...

  • Java正则表达式入门基础篇

    Java正则表达式入门基础篇 正则表达式是什么呢,在网上可以搜到很多版本的定义,大...

  • 11.BeautifulSoup详解

    上一篇:8.Urllib库基本使用下一篇:10.正则表达式基础 正则表达式其实对很多人来说用起来是不方便的,需要记...

  • [上嵌学习系列] 上嵌第一个月课程如何学

    内容:Linux基础,C语言基础,C语言高级要求:1) 掌握Linux基本命令2) 掌握程序逻辑3) 掌握开发基本...

  • Swift 正则表达式之ExpressibleByStringL

    前言 上篇文章:Swift 正则表达式详解+实例 基础篇 对Swift中的正则表达式的使用方式做了一些简单的概括,...

  • Python帮你找东西——Cheat Sheet

    上一篇文章给大家介绍了正则表达式的基础概念,字符和语法,展示了正则表达式常用的功能。但是正则表达式虽然很强大,但也...

  • 正则表达式的使用

    1.正则表达式的语法 iOS开发中正则表达式的基础使用 2.正则表达式不常用的语法 Q:经常看见的正则前面的 (?...

  • 【Linux操作】---正则表达式学习笔记(三)

    前言:通过前两篇的学习,我们已经掌握了如何利用正则表达式去"匹配位置"或者"匹配连续次数",在这一篇中,我们来总结...

网友评论

      本文标题:掌握正则表达式(2)基础篇(一)

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