我不明白为什么下面的PowerShell代码无法运行:
上面的代码会生成:
为什么它不能匹配两个数字?
([regex]"(^|\D)(\d{6})(\D|$)").Matches( "123456 123457" ).Value
上面的代码会生成:
123456
为什么它不能匹配两个数字?
([regex]"(^|\D)(\d{6})(\D|$)").Matches( "123456 123457" ).Value
123456
"(?<=\D)(\d{6})(?=\D)"
正则表达式匹配且不消耗6个数字前后的非数字字符(即在第一次迭代期间,123456
后面的空格未被消耗)。"(?<!\d)\d{6}(?!\d)"
请查看.NET正则表达式演示。
(?<!\d)
负向零宽断言用于判定当前位置左侧是否有数字,如果有数字则匹配失败。(?!\d)
负向零宽断言用于判定当前位置右侧是否有数字,不会改变正则表达式在字符串中的索引位置。
$string -match '(?<!\d)\d{6}(?!\d)' | Out-Null
,然后使用 $matches[0]
访问匹配值。 - Wiktor Stribiżew