正则表达卡住了

时间:2013-07-23 14:10:46

标签: regex

我想为以下字符串

创建正则表达式
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}$

3 个答案:

答案 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])))$