我正在尝试满足下一个限制:
我想得到一种下一个输出:
aaa -> good
aaaa -> good
-aaa -> bad
aaa- -> bad
---a -> bad
A 有一些没有给出正确答案的正则表达式:
1)
^[^-][a-z0-9\-.]{3,256}[^-]$
将所有测试线视为不良;2)
^[^-]+[a-z0-9\-.]{3,256}[^-]+$
将前三行视为一个匹配字符串,因为我猜 [^-] 匹配新行。3)
^[^-]?[a-z0-9\-.]{3,256}[^-]?$
(?对于一个或零匹配的破折号)使所有测试线都一样好真相在哪里?我感觉到它要么接近我的,要么更复杂。
附言我使用 python 3 re 模块。
最佳答案
这个几乎是正确的:^[^-][a-z0-9\-.]{3,256}[^-]$
[^-]
开头和结尾已经代表一个字符,因此您需要更改 {3,256}
进入 {1,254}
此外,您可能只需要 a-z、0-9 和 .在开始和结束(不仅仅是 - 之外的任何内容),所以完整的正则表达式变为:
^[a-z0-9.][a-z0-9\-.]{1,254}[a-z0-9.]$
关于regex - "not character"的正则表达式与预期不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34269523/