正则表达式 知识量:10 - 22 - 55
前后查找通过指定匹配结果的前后必须是哪些文本来标记位置,这种用法被称为正向前查找和正向后查找。
前后查找还有一种用法叫作负前后查找,是对正前后查找的取非。负前后查找又分为负向前查找和负向后查找。
负向前查找将向前查找不与给定模式相匹配的文本。负向前查找格式上就是由?!开头的子表达式。
示例文本:查找后面没有“点”的数字。
$1200. 65. $521 100
正则表达式:
\b\d+(?!\.)\b
结果:
Match | Position | Length |
---|---|---|
521 | 14 | 3 |
100 | 19 | 3 |
以上正则表达式应用了负向前查找,它匹配了数字,且数字的后面不能有“点”。\b是标识单词边界的限定符,这里用于匹配一个完整的数字,防止连续的数字被切割开。如果不使用\b,120也会被匹配。
负向后查找将向后查找不与给定模式相匹配的文本。负向后查找格式上就是由?<!开头的子表达式。
示例文本:查找开头不是“$”的数字。
$1200. 65. $521 100
正则表达式:
\b(?<!\$)\d+\b
结果:
Match | Position | Length |
---|---|---|
65 | 8 | 2 |
100 | 19 | 3 |
以上正则表达式应用了负向后查找,匹配了不是货币金额的数字。
各种前后查找操作符如表所示:
操作符 | 说明 |
---|---|
(?=) | 正向前查找 |
(?!) | 负向前查找 |
(?<=) | 正向后查找 |
(?<!) | 负向后查找 |
需要特别注意的几点:
常见的编程语言都支持向前查找,而向后查找支持的相对较少。Java、.NET、PHP和Perl支持向后查找,JavaScript则不支持向后查找。
通常,支持向前查找的语言同时支持正向前查找和负向前查找,支持向后查找的语言同时支持正向后查找和负向后查找。
取非操作符“^”不能用于对前后查找取非,在这里它是无效的。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6