3.2.1 什么是正则表达式

Posted avention

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.2.1 什么是正则表达式相关的知识,希望对你有一定的参考价值。

    正则表达式是一种表示方式,让你可以查找匹配特定准则的文本,例如,“以字母 a 开头”。此表示法让你可以写一个表达式,选定或匹配多个数据字符串。
 
    很多的UNIX工具程序沿用某一种正则表达式形式来强化本身的功能。这里列举一部分例子:
  • 用来寻找匹配文本行的 grep 工具族:grep 与 egrep ,以及非标准但很好用的 agrep 工具。
  • 用来改变输入流的 sed 流编辑器( stream editor ),本章稍后将会介绍。
  • 字符串处理程序语言,例如 awk、Icon、Perl、Python、Ruby、Tcl等。
  • 文件查看程序(有时称为分页程序,pagers ),例如 more、page、与 pg ,都常出现在商用UNIX系统上,另外还有 less分页程序。
  • 文本编辑器,例如历史悠久的 ed 编辑器、标准的 vi 屏幕编辑器,还有一些插件(add-on)编辑器,例如 emacs、jed、jove、vile、vim 等。
 
    正因为正则表达式对于UNIX的使用是这么重要,所以花些时间把它们弄熟绝对不会错,越早开始就能掌握得越好。
 
    从根本上来看,正则表达式是由两个基本组成部分所建立:一般字符与特殊字符。一般字符指的是任何没有特殊意义的字符,正如下表中所定义的。在某些情况下,特殊字符也可以视为一般字符。特殊字符常称为元字符( metacharacter ),本章接下来的部分都会以 meta 字符表示。
 
 
    POSIX BRE 与 ERE 的 meta 字符
字符 BRE/ERE 模式含义
两者都可 通常用以关闭后续字符的特殊意义。有时则是相反地打开后续字符的特殊意义,例如 ( ... ) 与 { ... } 。
. 两者都可 匹配任何单个的字符,但 NUL 除外。独立程序也可以不允许匹配换行字符。
* 两者都可 匹配在它之前的任何数目(或没有)的单个字符。以ERE而言,此前置字符可以是正则表达式, .* 代表“匹配任一字符的任一长度”。以BRE来说, * 若置于正则表达式的第一个字符,不具任何特殊意义。
^ 两者都可 匹配紧接着的正则表达式,在行或字符串的起始处。BRE:仅在正则表达式的开头处具此特殊含义,ERE:置于任何位置都具特殊含义。
$ 两者都可 匹配前面的正则表达式,在字符串或行结尾处。BRE:仅在正则表达式结尾处具此特殊含义,RER:置于任何位置都具特殊含义。
[...] 两者都可 方括号表达式,匹配方括号内的任一字符。连字符(-)指的是连续字符的范围。^符号置于方括号里第一个字符则有反向含义:指的是匹配不在列表内的任何字符。作为首字符的一个连字符或是结束方括号(]),则被视为列表的一部分。所有其他的 meat 字符也为列表的一部分。房括号表达式里可能会含有排序符号、等价字符集、以及字符集。
 
 
 
字符 BRE/ERE 模式含义
{n,m } BRE 区间表达式,匹配在它前面的单个字符重现的次数区间。{n}指的是重现 n 次;{n,}则为至少重现 n 次,而{n,m}为重现 n 至 m 次。m的值必须介于0至255间
( ) BRE 将( 与 ) 间的模式存储在特殊的“保留空间”。最多可以将9个独立的子模式存储在单个模式中。匹配于子模式的文本,可以通过转移序列1至9,被重复使用在相同模式里,例如(ab).*1,指的是匹配于ab组合的两次重现,中间可存在任何数目的字符。
BRE 重复在 方括号内第 n 个子模式至此点的模式。n为1至9的数字,1为由左开始。
{n,m} ERE 与先前提及BRE的{n,m}一样,只不过方括号前没有反斜杠。
+ ERE 匹配前面正则表达式的一个或多个实例。
? ERE 匹配前面正则表达式的零个或一个实例。
| ERE 匹配于|符号前或后的正则表达式。
( ) ERE 匹配于方括号括起来的正则表达式群。
 
简单的正则表达式匹配范例
 
表达式 匹配
tolstoy 位于一行上任何位置的7个字母:tolstoy
^tolstoy 7个字母tolstoy,出现在一行的开头
tolstoy$ 7个字母tolstoy,出现在一行的结尾
^tolstoy$ 正好包括tolstoy这7个字母的一行,没有其他的任何字符
[Tt]olstoy 在一行上的任意位置中,含有 Tolstoy 或是 tolstoy
tol.toy 在一行上的任意位置中,含有 tol 这3个字母,加上任何一个字符,再接着toy这3个字母。
tol.*toy 在一行上的任意位置中,含有 tol 这3个字母,加上任意的0或多个字符,再继续 toy 这3个字母。
 
 

以上是关于3.2.1 什么是正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式如何验证身份证号?

什么是正则表达式

两万文字详解Python正则表达式(语法验证方法使用案例练习题常见错误)

php正则表达式是啥?

什么时间用正则表达式什么时间用json提取器

正则表达式与文件格式化处理