正则表达式基础十一:条件匹配(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>
说明:
(<[Aa]\s+[^>]+>\s*)?代表匹配标签a开头部分,并作为子表达式1;否则不做匹配
\s+代表标签标题部分后面可以紧跟一个或多个空白字符;[^>]+代表标签头内部可以包含一个或多个属性字符(字符>除外);\s*代表标签头后面可以紧跟零个或多个空白字符。
<[Ii][Mm][Gg]\s+[^>]+>代表匹配标签img
\s+代表标签标题部分后面可以紧跟一个或多个空白字符;[^>]+代表标签头内部可以包含一个或多个属性字符(字符>除外);
(?(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位数字字符
浙公网安备 33010602011771号