我想为以下字符串
创建正则表达式abc.xy9.aBBB-hhh7.abcDD_XYz
即,
[A-Za-z0-9-_]
和.
但输入字符串包含至少3个且最多63个字符。请检查以下表达式
^((\\.?([a-z]{1})([A-Za-z0-9_-]*)([a-z0-9]{1}))*){3,63}$
答案 0 :(得分:1)
您已经提供了说明:
第一个字符是一个小写字母:[a-z]
最后是小字母或数字:[a-z0-9]
中间:[A-Za-z0-9 -_。]
至少3个字符,最多63个字符表示yu必须重复中间正则表达1到61次。
合:
[a-z][A-Za-z0-9_.-]{1,61}[a-z0-9]
但是:你需要一些不同于字母和数字的东西,它们包含你的字符串。没有它,这个正则表达式匹配,例如:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
这是因为正则表达式可以找到63'并且声称它匹配。
答案 1 :(得分:1)
^(([a-z][A-Za-z0-9_-]+[a-z0-9]\.)+[A-Za-z0-9_-]*[a-z0-9]|[a-z][A-Za-z0-9_-]+[a-z0-9])$
如果匹配,则检查长度(例如在PHP中检查preg_match返回> 0,然后用strlen检查总长度。)
我从你的例子中假设每个组以小写字母或数字结尾,而不仅仅是整个字符串的结尾
答案 2 :(得分:0)
不完全。请注意,最后{3,63}
正在应用于整个正则表达式 - 它将整个正则表达式应用63次。相反,尝试将其放在内部角色类上。另外,我认为你不想在开头有一段时间,你想要在你的角色类中,并且说{1}
是多余的。
^((([a-z])([A-Za-z0-9_-.]{1,61})([a-z0-9])))$