验证 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)来匹配在特定位置不包含给定子字符串的字符串?