概述

在开发过程中,经验遇到使用不同语言不同工具时,正则表达式无法直接复用的问题。主要原因在于不同语言使用的正则表达式的标准也是不一样的。

  • Basic Regular Expression
  • Extended Regular Expression
  • Perl Regular Expression

主要区别[^1]

流派 说明
BRE () {} + ? |都必须转义使用
ERE 元字符不必转义, + ? ( ) { } |可以直接使用
PRE 除了ERE支持的之外,还支持

BRE、ERE可以使用POSIX字符集来操作

使用支持

grep

支持BRE,通过参数控制,默认BRE, -P开启PRE, -E开启ERE

sed

支持BRE,默认BRE,-r开启ERE

awk

支持ERE,默认ERE。

C

c语言的regex根据man 3 regex看到的内容来看,支持BRE和ERE.

另外由于C语言字符串处理的性质,一般使用元字符时,需要额外的转义符,如\s

Python

python使用的是PRE,所以处理起来要相对C要简单不少

疑问

  • 为什么search和findall同时存在呢?
  • findall输出的内容里, 匹配输出过的字符串位置不会再作为输入被读取了呢?
    • 当我需要严格的全部匹配结果的时候...应该怎么做呢?

常用

不包含指定字符串所在行, 即过滤,取反能力

不包含kuebelet的行

1
^((?!kubelet).)*$

零宽断言

aaa后面的字符串, 不捕获aaa.

1
(?<=aaa).*

Reference

  1. 正则表达式基础知识|Jerkwin