正则表达式为高级的文本模式匹配、抽取、与/或文本形式的搜索和替换功能提供了基础。 简单地说,正则表达式(简称为 regex)是一些由字符和特殊符号组成的字符串,它们描述了 模式的重复或者表述多个字符,于是正则表达式能按照某种模式匹配一系列有相似特征的字符串。
一、使用择一匹配符号匹配多个正则表达式模式
表示择一匹配的管道符号(|),也就是键盘上的竖线,表示一个“从多个模式中选择其 一”的操作。它用于分割不同的正则表达式。有了这个符号,就能够增强正则表达式的灵活性,使得正则表达式能够匹配多个字符串 而不仅仅只是一个字符串。择一匹配有时候也称作并(union)或者逻辑或(logical OR)。
二、匹配任意单个字符
点号或者句点(.)符号匹配除了换行符\n 以外的任何字符,无论字母、 数字、空格(并不包括“\n”换行符)、可打印字符、不可打印字符,还是一个符号,使用点 号都能够匹配它们。然而要显式匹配一个句点符号本身,必须使用反斜线转义句点符号的功能,例如“\.”。
三、从字符串起始或者结尾或者单词边界匹配
四、创建字符集
五、限定范围和否定
括号中两个符号中间用连字符 (-)连接,用于指定一个字符的范围;例如,A-Z、a-z 或者 0-9 分别用于表示大写字母、小 写字母和数值数字。
六、使用闭包操作符实现存在性和频数匹配
星号或者星号操作符(*)将匹配其左边的正则表达式 出现零次或者多次的情况(在计算机编程语言和编译原理中,该操作称为 Kleene 闭包)。加 号(+)操作符将匹配一次或者多次出现的正则表达式(也叫做正闭包操作符),问号(?) 操作符将匹配零次或者一次出现的正则表达式。还有大括号操作符({}),里面或者是单个值或者是一对由逗号分隔的值。这将最终精 确地匹配前面的正则表达式 N 次(如果是{N})或者一定范围的次数。
如果问号紧跟在任何使用闭合操作符的匹配后面,它将直接要求正则表 达式引擎匹配尽可能少的次数。当模式匹配使用分组操作符时,正则表达式引擎将试图“吸收”匹配该模式的尽可能多的字符。这通常被叫做贪婪匹配。问号要求正则表达式引擎去“偷懒”,如果可能,就在当前的正则表达式中尽可能少地匹配字符,留下尽可能多的字符给后面的模式(如果存在)。
七、表示字符集的特殊字符
可以简单地使用 d 表示匹配任何十进制数字,另一个特殊字符(\w)能够用于表示全部字母数字的字符集,相当于[A-Za-z0-9_]的缩写形式,\s 可以用来表示空格字符。这些特殊字符的 大写版本表示不匹配。
八、使用圆括号指定分组
当使用正则表达式时,一对圆括号可以实现以下任意一个(或者两个)功能:
• 对正则表达式进行分组;
• 匹配子组。
九、扩展表示法