《正则表达式必知必会》
位置匹配
边界限定符,可以表明我们想让匹配操作在什么位置(或边界)发生。
- 单词边界:
\b
,用来匹配一个单词的开始或结尾;\B
正好相反。 - 字符串边界:
^
,定义字符串的开头; $,定义字符串的结尾。
子表达式
子表达式必须用()
括起来。
基本用途: 把一组字符编码组为一个字符集合。这样的字符集合主要用于精确设定需要重复匹配的文本及其重复次数。
另一重要用途: 定义回溯引用,见下。
回溯引用:前后一致匹配
回溯引用允许正则表达式模式引用前面的匹配结果。
回溯引用指的是模式的后半部分引用在前半部分中定义的子表达式。\1
代表模式里的第一个子表达式,\2
代表第二个子表达式。以此类推。(可以将回溯引用想象成变量)
注意: 不同的正则表达式在实现回溯引用的语法方面往往有着巨大的差异。
替换操作
替换操作需要用到两个正则表达式:一个用来给出搜索模式,另一个用来给出匹配文本的替换模式。回溯引用可以跨模式使用,在第一个模式里被匹配的子表达式可以用在第二个模式里。
用来进行大小写转换的元字符:
元字符 | 说明 |
---|---|
\E | 结束\L或\U转换 |
\l | 把下一个字符转换为小写 |
\L | 把\L到\E之间的字符全部转换为小写 |
\u | 把下一个字符转换为大写 |
\U | 把\U到\E之间的字符全部转换为大写 |
回溯引用的语法在不同的正则表达式实现里有很大的差异。回溯引用在文本匹配和文本替换操作里非常有用。
前后查找
向前查找指定了一个必须匹配但不在结果中返回的模式。向前查找实际就是一个以?=
开头的子表达式,需要匹配的文本跟在=
的后面。
向后查找: ?<=
将向前查找和向后查找结合起来,可以用来匹配HTML、XML文档中的内容。
各种前后查找操作符:
操作符 | 说明 |
---|---|
(?=) | 正向前查找 |
(?!) | 负向前查找 |
(?<=) | 正向后查找 |
(? | 负向后查找 |
嵌入条件
- 根据一个回溯引用来进行条件处理
定义这种条件的语法是(?(backreference)true-regrex|false-regrex)
- 根据一个前后查找来进行条件处理
定义一个前后向查找条件的语法与定义一个回溯引用条件的语法大同小异,只需把回溯引用(括号里的回溯引用编号)替换为一个完整的前后向查找表达式就行了。