Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 带或不带破折号的正则表达式匹配校验和_Regex_Pcre - Fatal编程技术网

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
    -单词边界
  • [0-9a-z]
    -数字或小写ASCII字母
  • (?:-?[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]+)*$
  • ^
    字符串的开头
  • (?=[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
。或者,
\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上学到很多东西。