验证FQDN名称而无需否定先行

时间:2019-07-02 15:07:06

标签: regex oracle plsql fqdn

我已找到此链接(www.regextester.com/103452)来验证基于REGEX的内容。

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

但是有一个问题,Oracle无法识别正向/负向超前。

第一个正向搜索(?=^.{4,253}$)很简单,我可以验证字符串的长度,但是对于负向搜索(?!-),我很难确定它。

1 个答案:

答案 0 :(得分:1)

((?!-)[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个必填字母或数字
  • \.-点。

因此,它再次匹配1到63个字符,并且在数字字母连字符序列的开头或结尾没有-