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

Bru*_*uno 3 regex powershell

我无法理解为什么以下PowerShell无法正常工作:

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

上面代码生成:

123456
Run Code Online (Sandbox Code Playgroud)

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

Wik*_*żew 6

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

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

"(?<!\d)\d{6}(?!\d)"
Run Code Online (Sandbox Code Playgroud)

查看.NET正则表达式演示.

(?<!\d),如果有一个数字立即到当前位置的左侧和负回顾后失败的比赛(?!\d),如果有一个数字紧接在当前位置之后,实际上并没有移动字符串中的正则表达式指数负向前查找失败的比赛.