我正在尝试匹配以下模式。
至少3个小组'由连字符分隔的字母数字字符。
例如:ABC1-AB-B5-ABC1
每个组的长度可以是任意数量。
我尝试了以下内容:
^(\w*(-)){3,}?$
这给了我想要的程度。
ABC1-AB-B5-0001失败,ABC1-AB-B5-0001-通过。
我不希望将尾随连字符作为要求。
我无法弄清楚如何修改表达式。
答案 0 :(得分:3)
您的^(\w*(-)){3,}?$
模式甚至允许使用-----
这样的字符串,因为此处唯一需要的模式是连字符:\w*
可能与 0 字符匹配。由于这个原因,-
可能都是前导和尾随。
您可以使用
\A\w+(?:-\w+){2,}\z
<强>详情:
\A
- 字符串开头\w+
- 1个单词字符(即字母,数字或_
符号)(?:-\w+){2,}
- 2个或更多序列:
-
- 一个连字符\w+
- 一个或多个单词字符\z
- 字符串的结尾。请参阅regex demo。
或者,如果您不想允许_
:
\A[^\W_]+(?:-[^\W_]+){2,}\z
或仅允许使用ASCII字母和数字:
\A[A-Za-z0-9]+(?:-[A-Za-z0-9]+){2,}\z
答案 1 :(得分:1)
可以是这样的:
^\w+-\w+-\w+(-\w+)*$
答案 2 :(得分:1)
^(\w+-){2,}(\w+)-?$
匹配2个以连字符分隔的组,然后匹配可能以连字符结尾的单个组。
答案 3 :(得分:0)