MonkeyHua

正则表达式基础十一:条件匹配(Condition Match)

介绍

一般搭配反向引用匹配前后匹配来使用

元字符列表

  • 反向引用条件匹配:(?(backref)true)
  • 前后条件匹配:(?(look)true)

反向引用条件匹配((?(backref)true)

匹配反向引用条件是否满足

示例

原始内容:

<!-- Nav bar -->
<div>
<a href="/home"><img src="/images/home.gif"></a>
<img src="/images/spacer.gif">
<a href="/search"><img src="/images/search.gif"></a>
<img src="/images/spacer.gif">
<a href="/help"><img src="/images/help.gif"></a>
</div>

正则表达式:

(<[Aa]\s+[^>]+>\s*)?<[Ii][Mm][Gg]\s+[^>]+>(?(1)\s*<\/[Aa]>)

<!-- Nav bar -->
<div>
<a href="/home"><img src="/images/home.gif"></a>
<img src="/images/spacer.gif">
<a href="/search"><img src="/images/search.gif"></a>
<img src="/images/spacer.gif">
<a href="/help"><img src="/images/help.gif"></a>
</div>

说明:

  1. (<[Aa]\s+[^>]+>\s*)?代表匹配标签a开头部分,并作为子表达式1;否则不做匹配
  • \s+代表标签标题部分后面可以紧跟一个或多个空白字符;
  • [^>]+代表标签头内部可以包含一个或多个属性字符(字符>除外);
  • \s*代表标签头后面可以紧跟零个或多个空白字符。
  1. <[Ii][Mm][Gg]\s+[^>]+>代表匹配标签img
  • \s+代表标签标题部分后面可以紧跟一个或多个空白字符;
  • [^>]+代表标签头内部可以包含一个或多个属性字符(字符>除外);
  1. (?(1)\s*<\/[Aa]>)表示若子表达式1存在,则匹配标签a的结束部分,否则不做匹配
  • ?(1)代表检查子表达式1是否存在;
  • \s*代表标签结束部分可以前置零个或多个空白字符。
  • <\/[Aa]>代表匹配标签结束部分。

前后条件匹配((?(look)true)

匹配前后条件是否满足

示例

原始内容:

11111
22222
33333-
44444-4444

正则表达式1:

\d{5}(-\d{4})?

11111
22222
33333-
44444-4444

(-\d{4})?表示-\d{4}作为整体,要么一起匹配上,要么不做匹配
-\d{4}代表匹配字符-后面紧跟4位数字字符

正则表达式2:

\d{5}(?(?=-)-\d{4})

11111
22222
33333-
44444-4444

说明:\d{5}代表匹配5位数字字符
(?(?=-)-\d{4})表示若向前查找到符号-,则匹配内容-\d{4},否则不做匹配
?(?=-)表示是否向前查找到符号-
-\d{4}代表匹配字符-后面紧跟4位数字字符

posted on 2026-03-26 10:35  MonkeyHua  阅读(22)  评论(0)    收藏  举报

导航