PowerShell带正则的Switch语句问题:无点字符条件异常触发
问题分析与解决
问题根源
你第三个条件里的正则"[^.]"逻辑错误:它仅匹配单个非点字符,只要字符串中存在至少一个非点字符就会触发匹配。所以不管输入是test.psd(含t/e等非点字符)、.psd(含p/s等非点字符)还是test,都会触发这个分支,导致不符合预期。
修正方案
要匹配整个字符串完全不含点的场景,需要用锚定整个字符串的正则:"^[^.]+$",同时给每个分支加上break避免多分支触发(PowerShell的switch默认会继续匹配后续分支)。
修正后的代码:
$NewName = "test.psd" switch -Regex ($NewName) { "^\..*" { 'Entry Starts with a "."' break } ".*\..*" { 'Entry does not start with a "."' break } "^[^.]+$" { 'No "." present' break } }
正则说明
^[^.]+$:^锚定字符串起始位置[^.]+匹配1个及以上非点字符$锚定字符串结束位置
组合起来就确保整个字符串中没有任何点字符,才会触发该分支。
内容的提问来源于stack exchange,提问作者hellen_dorandt89
相关产品推荐
相关产品推荐

