您的位置:首页 > 教育 > 培训 > 正则表达式 先行断言 \S {} 示例

正则表达式 先行断言 \S {} 示例

2025/11/13 7:56:30 来源:https://blog.csdn.net/feyehong/article/details/140246029  浏览:    关键词:正则表达式 先行断言 \S {} 示例

目录

  • 数据准备
  • 一. 先行断言
    • 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)

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com