验证 FQDN 名称而不使用负前瞻

Posted

技术标签:

【中文标题】验证 FQDN 名称而不使用负前瞻【英文标题】:Validate FQDN Name without negative lookahead 【发布时间】:2019-07-02 15:07:06 【问题描述】:

我找到了这个链接 (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】:

((?!-)[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 个字符,在数字-字母-连字符序列的开头或结尾处没有 -

【讨论】:

以上是关于验证 FQDN 名称而不使用负前瞻的主要内容,如果未能解决你的问题,请参考以下文章

部署vsphere6.5 vcenterHA时出现“请验证管理接口nic0”故障

如何使用负前瞻(NOT lookbehind)来匹配在特定位置不包含给定子字符串的字符串?

如何使负前瞻与行尾文本一起使用

正则表达式忽略分组顺序匹配(前瞻后顾负前瞻负后顾的应用)

正则表达式前瞻(?=)后顾(?<)负前缀(?!)负后顾(?<!)

负前瞻正则表达式贪婪(为啥.*?太贪婪)