我正在尝试构造一个匹配符合以下条件的字符串的正则表达式语句:
abc-123.xyz< - 应匹配
abc123-.xyz< - 不应该匹配
我已经能够将这个正则表达式放在一起,但它没有达到第三个要求。我试图使用另一个负向前瞻/后视,[即。 - (?!.- | - 。)]但它仍然匹配相邻句点和短划线的字符串。这是我提出的正则表达式,符合条件1& 2:
^(?!\.|-)([a-z0-9]|\.|-){3,63}(?<!\.|-)$
仅供参考,此正则表达式用于在CloudFormation模板中指定AWS S3存储桶名称时验证输入。
答案 0 :(得分:0)
怎么样:
^(?=.{3,63}$)[a-z0-9]+(?:[-.][a-z0-9]+)*$
答案 1 :(得分:0)
^[a-z0-9](?:[a-z0-9]|[.\-](?=[a-z0-9])){2,62}$
我们匹配一个小写的字母数字字符,然后重复2到62次:
.
或-
(必须后跟小写的字母数字字符)。最后一项限制可确保您不能连续两个.
/ -
字符,或字符串末尾的.
/ -
答案 2 :(得分:0)
使用此模式^(?!.*[.-](?=[.-]))[^.-][a-z0-9.-]{1,61}[^.-]$
Demo
# ^(?!.*[.-](?=[.-]))[^.-][a-z0-9.-]{1,61}[^.-]$
^ # Start of string/line
(?! # Negative Look-Ahead
. # Any character except line break
* # (zero or more)(greedy)
[.-] # Character in [.-] Character Class
(?= # Look-Ahead
[.-] # Character in [.-] Character Class
) # End of Look-Ahead
) # End of Negative Look-Ahead
[^.-] # Character not in [.-] Character Class
[a-z0-9.-] # Character in [a-z0-9.-] Character Class
{1,61} # (repeated {1,61} times)
[^.-] # Character not in [.-] Character Class
$ # End of string/line