正则表达式匹配校验和,带或不带破折号

问题描述

要匹配无破折号的校验和,我可以做类似的事情:

\b[0-9a-z]{32}\b

但是,我看到一些校验和也带有破折号,例如:

d3bd55bf-062f-473b-9417-935f62c4c98a

虽然这可能是固定大小,依次为8、4、4、4、12,但是我想知道是否可以做一个正则表达式,其中非破折号的数字加起来 strong> 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}-可选-的31个重复,后跟一个数字或一个小写的ASCII字母
  • \b-单词边界。

如果您不介意在末尾的-后面有一个字符char,那么在比赛结束时,您也可以使用

\b(?:[0-9a-z]-?){32}\b

请参见this regex demo。在这里,(?:[0-9a-z]-?){32}将匹配数字或小写ASCII字母的32个重复,后跟一个可选的连字符。

,

如果可以有多个破折号,则可以使用正向先行声明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次以上,以匹配不带破折号的字符串
  • $字符串结尾

Regex demo

如果要将破折号的数量限制为0 -4次,则可以将量词*更改为{0,4}+

^(?=[a-z0-9-]{32,36}$)[a-z0-9]+(?:-[a-z0-9]+){0,4}+$

Regex demo

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...