正则表达式
常用匹配方式
匹配方式 | 说明 |
---|---|
(pattern) | 匹配 pattern 并获取保存这一匹配。通过 $1 获取变量 |
(?:pattern) | 匹配 pattern 但不获取匹配结果,不进行变量存储,使用 $1 方式无用 |
(?=pattern) | 正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。不进行变量存储。例如,”Windows(?=95|98|NT|2000)”能匹配”Windows2000”中的”Windows”,但不能匹配”Windows3.1”中的”Windows”。 |
(?!pattern) | 正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。不进行变量存储。例如”Windows(?!95|98|NT|2000)”能匹配”Windows3.1”中的”Windows”,但不能匹配”Windows2000”中的”Windows”。 |
(?<=pattern) | 反向肯定预查,与正向肯定预查类似,只是方向相反。例如,”(?<=95|98|NT|2000)Windows”能匹配”2000Windows “中的”Windows “,但不能匹配”3.1Windows “中的”Windows “。 |
(?<!pattern) | 反向否定预查,与正向否定预查类似,只是方向相反。例如”(?<!95|98|NT|2000)Windows”能匹配”3.1Windows”中的”Windows”,但不能匹配”2000Windows”中的”Windows”。 |
例子说明:
struct.m_1;
struct.m_2;
struct.m_3;
struct.m_4;
struct.m_5;
(pattern): //进行存储供以后使用 $1 方式获取
表达式:
struct.(.*)
匹配结果:
共找到 5 处匹配:
struct.m_1; //$1 = m_1
struct.m_2; //$1 = m_2
struct.m_3; //$1 = m_3
struct.m_4; //$1 = m_4
struct.m_5; //$1 = m_5
(?:pattern): //不进行存储供以后使用 $1 方式无用
表达式:
struct.(?:m_2)
匹配结果:
共找到 1 处匹配:
struct.m_2 //$1方式无用
(?=pattern): //正向肯定预查
表达式:
struct.(?=m_2)
匹配结果:
共找到 1 处匹配:
struct.
(?!pattern): //正向否定预查
表达式:
struct.(?!m_2)
匹配结果:
共找到 4 处匹配:
struct. //m1
struct. //m3
struct. //m4
struct. //m5
(?<=pattern): //反向肯定预查
表达式:
(?<=m_2);
匹配结果:
共找到 1 处匹配:
; //m2的分号
(?<!pattern): //反向否定预查
表达式:
(?<!m_2);
匹配结果:
共找到 4 处匹配:
; //m1
; //m3
; //m4
; //m5