首页 > 解决方案 > 如何将要匹配的表达式分组为一个?

问题描述

我想要匹配的是这样的:

char-char-int-int-int
char-char-char-int-int-int
char-char-int-int-int-optionnalValue (optionalValue being a "-" plus letters after it

我当前的 regep 如下所示:

([A-Za-z]{1,2})([1-9]{3})("-"[\w])

最后,正则表达式应该匹配以下任何一个:

这些应该是无效的:

我究竟做错了什么 ?(请温柔,这是我在stackoverflow上的第一篇文章)

标签: regex

解决方案


如果您使用[A-Za-z]{1,2},那么第二个示例将不匹配,因为有 3 char-char-char

Using\w也将匹配数字和下划线。如果您的意思是 a-zA-Z 之类的字母,您可以在前面加上连字符的可选组中使用它(?:-[a-zA-Z]+)?

你可以使用

^[a-zA-Z]{2,3}[0-9]{3}(?:-[a-zA-Z]+)?$
  • ^字符串的开始
  • [a-zA-Z]{2,3}匹配 2 或 3 次 char A-Za-z
  • [0-9]{3}匹配 3 位数字
  • (?:-[a-zA-Z]+)?可选择匹配 a-和 1 个或多个字符 A-Za-z
  • $字符串结束

正则表达式演示

或者使用单词边界\b而不是锚点

\b[a-zA-Z]{2,3}[0-9]{3}(?:-[a-zA-Z]+)?\b

正则表达式演示


推荐阅读