目录
- 数据准备
- 一. 先行断言
- 1.1 正向先行断言
- 1.2 负向先行断言
- 二. 配合 {} 和 \S 使用
- 2.1 匹配一个任意非空白字符
- 2.2 匹配任意多个非空白字符
- 2.3 匹配3个非空白字符
- 2.4 匹配至少3个非空白字符
- 2.5 匹配0~3个非空白字符
数据准备
⏹文件1
0561-10 AAA 123 dfg @@345 sss
0561-20 BBB 456 ssa
0561-30 CCC 123 sss ~1~2
0561-40 CCC 432 cvf
0561-50 DDD 123 sss
0561-60 EEE 111 sss 123
0561-60 FFF 111 123 YYY
⏹文件2
foo1bar foo2bar foo2wwebar foo3baz
foo~bar foo@Dwbar foo3baz
一. 先行断言
在正则表达式中,先行断言是一种特殊的断言,用来匹配某个位置前后的特定模式,但不消耗字符。
先行断言分为
- 正向先行断言(positive lookahead)
- 负向先行断言(negative lookahead)
1.1 正向先行断言
正向先行断言用于断言在某个位置之后必须能匹配一个特定的模式。语法为:(?=pattern)
⏹\s123.*(?=sss)
- 任意空白字符后面跟着 123,然后跟着任意数量的字符,直到遇到后面紧跟着 sss 的位置
- 该行,要有先有 123,再有 sss,且 sss 不参与匹配
1.2 负向先行断言
负向先行断言用于断言在某个位置之后不能匹配一个特定的模式。语法为:(?!pattern)
⏹^(?=.*123)(?!.*sss).*
^
:匹配字符串的开始位置。(?=.*123)
:正向先行断言,表示在当前位置后面必须至少包含 123 这个子串(?!.*sss)
:负向先行断言,表示在当前位置后面不能包含 sss 这个子串.*
:匹配任意数量(包括零个)的字符。$
:匹配字符串的结束位置。
⏹确保字符串中包含至少一个 123,并且不包含 sss。
如果符合这两个条件,那么整个字符串将被匹配。
二. 配合 {} 和 \S 使用
\S
:匹配任意非空白字符{}
:用来指定前面模式的重复次数的量词{n}
:匹配前面的模式恰好 n 次{n,}
:匹配前面的模式至少 n 次{n,m}
:匹配前面的模式至少 n 次,最多 m 次
2.1 匹配一个任意非空白字符
⏹foo\S(?=bar)
foo
:字面匹配字符序列 foo\S
:匹配任意非空白字符(?=bar)
:正向先行断言,表示在当前位置之后必须紧跟着字符串 bar
2.2 匹配任意多个非空白字符
⏹foo\S+(?=bar)
2.3 匹配3个非空白字符
⏹foo\S{3}(?=bar)
2.4 匹配至少3个非空白字符
⏹foo\S{3,}(?=bar)
2.5 匹配0~3个非空白字符
⏹foo\S{0,3}(?=bar)