Regex 带或不带破折号的正则表达式匹配校验和
要匹配无破折号校验和,我可以执行以下操作:Regex 带或不带破折号的正则表达式匹配校验和,regex,pcre,Regex,Pcre,要匹配无破折号校验和,我可以执行以下操作: \b[0-9a-z]{32}\b 但是,我看到一些校验和也有破折号,例如: d3bd55bf-062f-473b-9417-935f62c4c98a 虽然这可能是一个固定的大小,8,然后4,然后4,然后4,然后12,我想知道我是否可以做一个正则表达式,其中非破折号的数字加起来是32。我认为答案是否定的,但希望一些正则表达式向导能想出一些办法 以下是一些示例输入的起点:。您可以使用 \b[0-9a-z](?:-?[0-9a-z]){31}\b 看
\b[0-9a-z]{32}\b
但是,我看到一些校验和也有破折号,例如:
d3bd55bf-062f-473b-9417-935f62c4c98a
虽然这可能是一个固定的大小,8,然后4,然后4,然后4,然后12,我想知道我是否可以做一个正则表达式,其中非破折号的数字加起来是32。我认为答案是否定的,但希望一些正则表达式向导能想出一些办法
以下是一些示例输入的起点:。您可以使用
\b[0-9a-z](?:-?[0-9a-z]){31}\b
看
相配
-单词边界\b
-数字或小写ASCII字母[0-9a-z]
-可选(?:-?[0-9a-z]){31}
的三十一次重复,后跟一个数字或小写ASCII字母-
-单词边界\b
-
,如果后面有一个单词char,那么在匹配结束时,您也可以使用
\b(?:[0-9a-z]-?){32}\b
看。这里,
(?:[0-9a-z]-?){32}
将匹配32个重复的数字或小写ASCII字母,后跟可选的连字符。如果可以有多个破折号,可以使用正向前瞻断言32到36个字符
^(?=[a-z0-9-]{32,36}$)[a-z0-9]+(?:-[a-z0-9]+)*$
字符串的开头^
正向前瞻,断言右侧列出的字符重复了32-36次(?=[a-z0-9-]{32,36}$)
将列出的任何一项匹配1+次[a-z0-9]+
非捕获组(?:
匹配一个-[a-z0-9]+
,后跟所列任何一个的1+倍(字符串不能以连字符结尾)-
关闭组并匹配0+次,以匹配不带破折号的字符串)*
字符串结尾$
*
更改为{0,4}+
^(?=[a-z0-9-]{32,36}$)[a-z0-9]+(?:-[a-z0-9]+){0,4}+$
试试
\b(?[0-9a-z]-?){32}\b
。或者,\b[0-9a-z](?:-?[0-9a-z]){31}\b
如果最后没有-
。@WiktorStribiżew谢谢,你能解释一下答案是如何工作的吗?或者如果答案中有0-4个破折号,你可以断言32-36个字符^(?=[a-z0-9-]{32,36}$)[a-z0-9]+(?:[a-z0-9]+$)*
非常清楚的解释,谢谢。出于好奇,除了“练习”,你会建议如何提高我的正则表达式技能?@samuelbrody1249通过练习,你将学会如何快速为每种情况选择最佳模式。要真正学习,您需要研究单独的案例及其解决方案。您可以在rexegg.com和regular-expressions.info上学到很多东西。