在没有否定前瞻的情况下验证 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 个字符。
我发现这个 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 个字符。