1

我想为以下字符串创建一个正则表达式

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}$
4

3 回答 3

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 个 'a's 并声称它是匹配的。

于 2013-07-23T14:25:43.623 回答
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 检查总长度)。

我从您的示例中假设每个组都以小写字母或数字结尾,而不仅仅是整个字符串的结尾

于 2013-07-23T14:49:35.903 回答
0

不完全的。看,{3,63}最后将应用于整个正则表达式 - 它将应用整个正则表达式 63 次。相反,试着把它放在你的内在角色类上。另外,我不认为你在开始时想要一个句号,你想要在你的角色类中,说{1}是多余的。

^((([a-z])([A-Za-z0-9_-.]{1,61})([a-z0-9])))$
于 2013-07-23T14:16:39.327 回答