我正在尝试匹配以下模式。
至少 3 个由连字符分隔的“组”字母数字字符。
例如:ABC1-AB-B5-ABC1
每个组的长度可以是任意数量的字符。
我尝试了以下方法:
^(\w*(-)){3,}?$
这在一定程度上给了我想要的东西。
ABC1-AB-B5-0001 失败,ABC1-AB-B5-0001- 通过。
我不希望尾随连字符成为必需条件。
我不知道如何修改表达式。
请您参考如下方法:
您的 ^(\w*(-)){3,}?$ 模式甚至允许像 ----- 这样的字符串,因为这里唯一需要的模式是一个连字符:\w* 可能匹配 0 个字符。因此 - 可能既是前导又是尾随。
你可以使用
\A\w+(?:-\w+){2,}\z
详细信息:
\A- 字符串的开始\w+- 1+ 个单词字符(即字母、数字或_符号)(?:-\w+){2,}- 2 个或更多序列:-- 一个连字符\w+- 1 个或多个单词字符
\z- 字符串的末尾。
参见 regex demo .
或者,如果您不想允许 _:
\A[^\W_]+(?:-[^\W_]+){2,}\z
或者只允许 ASCII 字母和数字:
\A[A-Za-z0-9]+(?:-[A-Za-z0-9]+){2,}\z
