regex - 如何将要匹配的表达式分组为一个?
问题描述
我想要匹配的是这样的:
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])
最后,正则表达式应该匹配以下任何一个:
- AB001
- aB999
- HM000
- en789
- rv005-ab
这些应该是无效的:
- ab(因为只有字母)
- abcfr(因为字母太多)
- 158(因为只有数字)
- 78532(因为数字太多)
- 123ab(因为所有字母都应该在数字之前,可选值除外)
- a1b23(因为字母和数字是混用的)
我究竟做错了什么 ?(请温柔,这是我在stackoverflow上的第一篇文章)
解决方案
如果您使用[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
推荐阅读
- javascript - 我将如何删除 Firebase 中的单个项目?
- javascript - 带有字符“:”的网址是什么意思
- android - 创建一个扩展 API 25+ 资源的类
- synchronization - Hybris Backoffice 的类别同步缺少 hmc 上存在的一些选项
- php - 如何选择除一个搜索关键字之外的所有关键字?
- julia - Julia 宏中的“UndefVarError”
- ruby-on-rails - 。当下?在触发 after_save 回调的 ActiveRecord 对象上
- typescript - 如何在不更改 JavaScript 检查(WebStorm)的情况下禁用 TypeScript 模块中的“未终止语句”检查?
- c++ - C++矩阵破坏导致断点和严重错误(解决方法在问题的最后)
- ubuntu - 尝试将端口 53 从一个虚拟机 ping 到同一网络上的另一个虚拟机时,端口 53 显然被阻止