首页 > 解决方案 > 正则表达式格式长度

问题描述

所以我在powershell中写了一个脚本(不是重点),我想匹配一个特定的字符串格式,但是字符串可以比我的格式长,我不希望它匹配。我希望它只有一定的长度。

例如。我希望我的格式匹配[AZ]{3}[TLZ]\d{5}但仅此而已。例如,STSZ43332 是匹配的,但我不想匹配 STSZ433321。我知道我可以在检查长度之前运行 if 语句,但想知道它是否可能在正则表达式中。

如果重要,这是我在 powershell 中的 If 语句。

If ($Name -match "[A-Z]{3}[TLZ]\d{5}") {Write-Host "Found match"}

问题是,如果 $name 比我预期的 9 个字符长(来自正则表达式},如果可以在 $name 中找到正则表达式字符串,它仍然可以返回为真。正如我所说,如果 $name.length 到匹配 $name 只有 9 但想知道正则表达式是否也有这样做的方法。

谢谢

标签: regex

解决方案


在正则表达式中,您可以使用锚点,它不匹配任何特定字符,但确保您的匹配边界在给定位置。在这种情况下,您可以使用行首锚^和行尾锚$,这样就没有其他字符的空间了。因此,您的最终表达式应如下所示:

^[A-Z]{3}[TLZ]\d{5}$

除非匹配的开头位于字符串的开头并且匹配的结尾位于字符串的末尾,否则这不会匹配。如果其中有任何多余的字符,则不会出现这种情况,因此匹配将失败。


推荐阅读