带有"not character"的正则表达式与预期不匹配

Whi*_*rue 4 regex

我正在努力满足下一个限制:

  1. line有3到256个字符,分别是az,0-9,dash或dot.
  2. 这条线无法开始或结束 -

我想获得下一个输出:

aaa  -> good
aaaa -> good
-aaa -> bad
aaa- -> bad
---a -> bad
Run Code Online (Sandbox Code Playgroud)

有一些正则数据没有给出正确答案:1)^[^-][a-z0-9\-.]{3,256}[^-]$所有测试线都是坏的;

2)^[^-]+[a-z0-9\-.]{3,256}[^-]+$将前三行视为一个匹配的字符串,因为[^ - ]匹配新行我猜.

3)^[^-]?[a-z0-9\-.]{3,256}[^-]?$(?用于一个或零匹配的破折号)使所有测试线都很好

真相在哪里?我感觉它要么接近我的要么更复杂.

PS我使用python 3 re模块.

Man*_*anu 5

这个几乎是正确的: ^[^-][a-z0-9\-.]{3,256}[^-]$

[^-]开始和结束已经代表一个字符,所以你需要改变{3,256}{1,254}

此外,你可能只想要az,0-9和.在开始和结束(不只是任何东西,除了- ),所以完整的regex变为:

^[a-z0-9.][a-z0-9\-.]{1,254}[a-z0-9.]$
Run Code Online (Sandbox Code Playgroud)