?(backer-ference)true-regex|false-regex
举例:
\d{5}(?(?=-)-\d{4}|\s\d{4})
解析一下正则:\d{5}(?(?=-)
-\d{4}|
\s\d{4})
\d{5},这个很简单,就是匹配5个数字
(?(?=-)-\d{4}) 第一个?,表明这是一个前后查找条件,?=-匹配一个连字符‘-’,但不消费,如果条件得到满足(匹配到连字符),那么-\d{4}将匹配那个连字符后随后的4位数字。这样一来,33333-就被排除在最终的匹配结果之外了。
没有找到-就会匹配\s\d{4}
这种写法不是所有的语言都支持,比如java就不行,我是用.net测试的。
上图: