带或不带破折号的正则表达式匹配校验和
Regex match checksum with or without dashes
为了匹配无破折号的校验和,我可以这样做:
\b[0-9a-z]{32}\b
但是,我看到一些校验和也有破折号,例如:
d3bd55bf-062f-473b-9417-935f62c4c98a
虽然这可能是一个固定大小,先是 8,然后是 4,然后是 4,然后是 4,然后是 12,但我想知道我是否可以做一个正则表达式,其中非短划线数字的数量 adds最多 32。我认为答案是否定的,但希望一些正则表达式向导可以想出一些东西。
这里是一些示例输入的起点:https://regex101.com/r/K0IMKe/1。
您可以使用
\b[0-9a-z](?:-?[0-9a-z]){31}\b
参见regex demo。
匹配
\b
- 单词边界
[0-9a-z]
- 数字或小写 ASCII 字母
(?:-?[0-9a-z]){31}
- thirty-one 重复可选的 -
后跟单个数字或小写 ASCII 字母
\b
- 单词边界。
如果你不介意尾随 -
如果后面有一个单词 char,在匹配结束时,你也可以使用
\b(?:[0-9a-z]-?){32}\b
参见 this regex demo。在这里,(?:[0-9a-z]-?){32}
将匹配 thirty-two 重复的数字或小写 ASCII 字母后跟一个可选的连字符。
如果可以有多个破折号,您可以使用肯定的先行断言 32 到 36 个字符。
^(?=[a-z0-9-]{32,36}$)[a-z0-9]+(?:-[a-z0-9]+)*$
^
字符串开头
(?=[a-z0-9-]{32,36}$)
正面前瞻,断言右边的是所列字符的 32 - 36 次重复
[a-z0-9]+
匹配任何列出的 1 次以上
(?:
非捕获组
-[a-z0-9]+
匹配 -
后跟任何列出的 1+ 次(字符串不能以连字符结尾)
)*
关闭组并匹配0+次也匹配没有破折号的字符串
$
字符串结束
如果您想将破折号的数量限制为 0 -4 次,您可以将量词 *
更改为 {0,4}+
^(?=[a-z0-9-]{32,36}$)[a-z0-9]+(?:-[a-z0-9]+){0,4}+$
为了匹配无破折号的校验和,我可以这样做:
\b[0-9a-z]{32}\b
但是,我看到一些校验和也有破折号,例如:
d3bd55bf-062f-473b-9417-935f62c4c98a
虽然这可能是一个固定大小,先是 8,然后是 4,然后是 4,然后是 4,然后是 12,但我想知道我是否可以做一个正则表达式,其中非短划线数字的数量 adds最多 32。我认为答案是否定的,但希望一些正则表达式向导可以想出一些东西。
这里是一些示例输入的起点:https://regex101.com/r/K0IMKe/1。
您可以使用
\b[0-9a-z](?:-?[0-9a-z]){31}\b
参见regex demo。
匹配
\b
- 单词边界[0-9a-z]
- 数字或小写 ASCII 字母(?:-?[0-9a-z]){31}
- thirty-one 重复可选的-
后跟单个数字或小写 ASCII 字母\b
- 单词边界。
如果你不介意尾随 -
如果后面有一个单词 char,在匹配结束时,你也可以使用
\b(?:[0-9a-z]-?){32}\b
参见 this regex demo。在这里,(?:[0-9a-z]-?){32}
将匹配 thirty-two 重复的数字或小写 ASCII 字母后跟一个可选的连字符。
如果可以有多个破折号,您可以使用肯定的先行断言 32 到 36 个字符。
^(?=[a-z0-9-]{32,36}$)[a-z0-9]+(?:-[a-z0-9]+)*$
^
字符串开头(?=[a-z0-9-]{32,36}$)
正面前瞻,断言右边的是所列字符的 32 - 36 次重复[a-z0-9]+
匹配任何列出的 1 次以上(?:
非捕获组-[a-z0-9]+
匹配-
后跟任何列出的 1+ 次(字符串不能以连字符结尾)
)*
关闭组并匹配0+次也匹配没有破折号的字符串$
字符串结束
如果您想将破折号的数量限制为 0 -4 次,您可以将量词 *
更改为 {0,4}+
^(?=[a-z0-9-]{32,36}$)[a-z0-9]+(?:-[a-z0-9]+){0,4}+$