首页 > 解决方案 > 正则表达式 Powershell

问题描述

我想要一个由正则表达式管理的变量,我想要一个以 4 个字母开头后跟 4 个数字的永久代码:对于正则表达式,我发现: \D{4}\d{4}这是正确的,我不知道如何有一个变量仅内容 4 个字母和 4 个数字。

$permanentCode ="LETT7654"
if($permanentCode=\D{4}\d{4}){

  "valid code"
}

else {
 "invalid code"
}

标签: regexpowershell

解决方案


首先,语法错误。赋值运算符后面的字符串必须用引号括起来'LETT7654',并且'\D{4}\d{4})'

RegEx 用于匹配而不是分配。但是,您可以使用 RegEx 获取内容并将这些结果分配给变量。

您还在 if 语句中使用了赋值运算符=与比较-eq。正则表达式当然需要工作,因为\d, 将匹配字符串中的任何 4 个连续数字,这同样适用于 \D。

Clear-Host
$TestCode = {
    if($PermanentCode -match '(\D{4}\d{4})')
    {'valid code'}
    else {'invalid code'}
}

$PermanentCode = 'LETT7654'
& $TestCode

$PermanentCode = 'LE7654'
& $TestCode

$PermanentCode = 'LETTZ7654'
& $TestCode

$PermanentCode = 'LETT654'
& $TestCode

$PermanentCode = 'LETT7654000000000'
& $TestCode
# Results
<#
valid code
invalid code
valid code
invalid code
valid code
#>

如果您真的打算将其限制$PermanentCode为仅 4 个字符和 4 个数字;所以,总长度最大为 8。那么,这样的事情应该做

Clear-Host
$TestCode = {
    if($PermanentCode -match '^[a-zA-Z]{3}\w\d{4}\b')
    {'valid code'}
    else {'invalid code'}
}

$PermanentCode = 'LETT7654'
& $TestCode

$PermanentCode = 'LE7654'
& $TestCode

$PermanentCode = 'LETTZ7654'
& $TestCode

$PermanentCode = 'LETT654'
& $TestCode

$PermanentCode = 'LETT7654000000000'
& $TestCode

$PermanentCode = 'ZZZZ7654'
& $TestCode
# Results
<#
valid code
invalid code
invalid code
invalid code
invalid code
valid code
#>

推荐阅读