在没有否定前瞻的情况下验证 FQDN 名称

Validate FQDN Name without negative lookahead

我发现这个 link(www.regextester.com/103452) 来验证基于 REGEX 的。

(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{0,62}[a-zA-Z0-9]\.)+[a-zA-Z]{2,63}$)

但是有一个问题,Oracle 无法识别 Positive/Negative Lookahead。

第一个正前瞻 (?=^.{4,253}$) 很简单,我可以验证字符串的长度,但是对于负前瞻 (?!-) 我在弄清楚它时遇到了一些麻烦。

((?!-)[a-zA-Z0-9-]{0,62}[a-zA-Z0-9]\.)+ 表示 1 次或多次重复:

  • (?!-)[a-zA-Z0-9-]{0,62} - 0 到 62 个字母、数字或 -,序列的第一个字符不等于 -
  • [a-zA-Z0-9] - 一个字母或数字
  • \. - 一个点。

改写:可以有 1 到 63 个字母、数字或 -,没有 - 作为 ..

之前序列的第一个或最后一个字符

改用([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+,它将匹配 1 次或多次重复:

  • [a-zA-Z0-9] - 一个字母或数字
  • ([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])? - 0 到 61 个字母、数字或 - 的可选序列,然后是 1 个必须的字母或数字
  • \. - 一个点。

因此,它再次匹配 digit-letter-hyphen 序列开头或结尾没有 - 的 1 到 63 个字符。