我必须匹配的字符串是3-6字符长,包含至少一个字母,但可以有字母,数字和只有1 "-“。"-“不能出现在开头或开头。
比赛:
string
str-ng
st-ng
s1-1g
st-1g不匹配:
strings
-string
string-
st--ng
s-tn-g
1111
st我得到的最接近的是:
^((?!-.*-)[0-9A-Z]{3,6})$但是,这将正则表达式匹配与-分开,因此它与s-tri匹配,而不匹配st-ri,因为两端没有3个字符
发布于 2021-01-11 11:05:27
也许你可以用:
^(?=.*[a-z])(?!-|.*-$|.*-.*-)[a-z\d-]{3,6}$请参阅在线演示
^ -启动字符串锚.(?=.*[a-z]) -积极展望,以确保至少有一个字母。(?!-|.*-$|.*-.*-) -负前瞻,以防止连字符在开头或在结束或的倍数。[a-z\d-]{3,6} --一个角色在课堂上的三到六次。$端字符串锚.注意,我使用了不区分大小写的标志。
发布于 2021-01-11 10:58:20
您可以使用
^(?=.{3,6}$)(?=[^a-zA-Z]*[A-Za-z])[0-9a-zA-Z]+(?:-[0-9a-zA-Z]+)?$见regex演示。详细信息:
^ -字符串的开始(?=.{3,6}$) - string必须包含除换行字符之外的三到六个字符。(?=[^a-zA-Z]*[A-Za-z]) -字符串中必须至少有一个ASCII字母[0-9a-zA-Z]+ -一个或多个字母数字ASCII字符(?:-[0-9a-zA-Z]+)? -一个可选的-序列,然后是一个或多个字母数字字符$ -字符串的末端。发布于 2021-01-11 11:15:55
查看您尝试过的模式,当出现两个连字符时,您就意味着排除匹配。
另外,这个部分[0-9A-Z]{3,6}与连字符不匹配。
阅读
"-“不能出现在开头或开头。
你可以用
^(?![^\n-]*-[^\n-]*-)(?=[^a-zA-Z\n]*[a-zA-Z])[a-zA-Z0-9][a-zA-Z0-9-]{2,5}$如果您的意思是在结尾也没有-:
^(?![^\n-]*-[^\n-]*-)(?=[^a-zA-Z\n]*[a-zA-Z])[a-zA-Z0-9][a-zA-Z0-9-]{1,4}[a-zA-Z0-9]$解释
^开始(?![^\n-]*-[^\n-]*-)断言不超过2次-(?=[^a-zA-Z\n]*[a-zA-Z])断言一个char[a-zA-Z0-9]匹配没有-的列表之一[a-zA-Z0-9-]{1,4}重复1-4次列出的任何一个包括-[a-zA-Z0-9]匹配没有-的列表之一$末端https://stackoverflow.com/questions/65665552
复制相似问题