正则表达式

正则表达式 知识量:10 - 22 - 55

9.2 对前后查找取非><

负向前查找- 9.2.1 -

前后查找通过指定匹配结果的前后必须是哪些文本来标记位置,这种用法被称为正向前查找和正向后查找。

前后查找还有一种用法叫作负前后查找,是对正前后查找的取非。负前后查找又分为负向前查找和负向后查找。

负向前查找将向前查找不与给定模式相匹配的文本。负向前查找格式上就是由?!开头的子表达式。

示例文本:查找后面没有“点”的数字。

$1200.
65.
$521
100

正则表达式:

\b\d+(?!\.)\b

结果:

MatchPositionLength
521143
100193

以上正则表达式应用了负向前查找,它匹配了数字,且数字的后面不能有“点”。\b是标识单词边界的限定符,这里用于匹配一个完整的数字,防止连续的数字被切割开。如果不使用\b,120也会被匹配。

负向后查找- 9.2.2 -

负向后查找将向后查找不与给定模式相匹配的文本。负向后查找格式上就是由?<!开头的子表达式。

示例文本:查找开头不是“$”的数字。

$1200.
65.
$521
100

正则表达式:

\b(?<!\$)\d+\b

结果:

MatchPositionLength
6582
100193

以上正则表达式应用了负向后查找,匹配了不是货币金额的数字。

小总结- 9.2.3 -

各种前后查找操作符如表所示:

操作符说明
(?=)正向前查找
(?!)负向前查找
(?<=)正向后查找
(?<!)负向后查找

需要特别注意的几点:

  • 常见的编程语言都支持向前查找,而向后查找支持的相对较少。Java、.NET、PHP和Perl支持向后查找,JavaScript则不支持向后查找。

  • 通常,支持向前查找的语言同时支持正向前查找和负向前查找,支持向后查找的语言同时支持正向后查找和负向后查找。

  • 取非操作符“^”不能用于对前后查找取非,在这里它是无效的。