我无法理解为什么以下PowerShell无效:
([regex]"(^|\D)(\d{6})(\D|$)").Matches( "123456 123457" ).Value
上面的代码产生:
123456
为什么不匹配这两个数字?
答案 0 :(得分:6)
"(^|\D)(\d{6})(\D|$)"
正则表达式匹配且消耗 6位数之前和之后的非数字字符(即第一次迭代期间消耗123456
之后的空格)。
使用非消费构造,lookbehind和lookahead:
"(?<!\d)\d{6}(?!\d)"
如果当前位置左侧有一个数字,则(?<!\d)
负向后看未通过匹配,如果当前位置后面有一个数字,则(?!\d)
否定预测未通过匹配,实际上在字符串中移动正则表达式索引。