为什么这个正则表达式与第二个6位数字不匹配?

时间:2017-04-25 09:24:12

标签: regex powershell

我无法理解为什么以下PowerShell无效:

([regex]"(^|\D)(\d{6})(\D|$)").Matches( "123456 123457" ).Value

上面的代码产生:

123456

为什么不匹配这两个数字?

1 个答案:

答案 0 :(得分:6)

"(^|\D)(\d{6})(\D|$)"正则表达式匹配且消耗 6位数之前和之后的非数字字符(即第一次迭代期间消耗123456之后的空格)。

使用非消费构造,lookbehind和lookahead:

"(?<!\d)\d{6}(?!\d)"

查看.NET regex demo

如果当前位置左侧有一个数字,则(?<!\d)负向后看未通过匹配,如果当前位置后面有一个数字,则(?!\d)否定预测未通过匹配,实际上在字符串中移动正则表达式索引。