问题描述
要匹配无破折号的校验和,我可以做类似的事情:
\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次以上,以匹配不带破折号的字符串 -
$
字符串结尾
如果要将破折号的数量限制为0 -4次,则可以将量词*
更改为{0,4}+
^(?=[a-z0-9-]{32,36}$)[a-z0-9]+(?:-[a-z0-9]+){0,4}+$