我想帮助制定一个正则表达式,我可以用它查询 MySQL5.6 以获得正确 FQDN 格式的主机名列表。
我发现以下正则表达式在进行在线搜索,与我正在寻找的内容非常匹配https://www.regextester.com/98986
"^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.){2,}([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9]){2,}$"
当我在 python 中测试这个正则表达式时,它给了我预期的结果。
>>> reg = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.){2,}([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9]){2,}$"
>>> hostname ='abc.tmp.company.com'
>>> print(re.search(reg,hostname))
<_sre.SRE_Match object at 0x109da5880>
>>> res = re.search(reg,hostname)
>>> res.group(0)
'abc.tmp.company.com'
>>> invalid_hostname ='invalid'
>>> print(re.search(reg,invalid_hostname))
None
>>> invalid_hostname2 = 'in-test-stg'
>>> print(re.search(reg,invalid_hostname2))
None
但是当我查询 MySQL 时,它也返回了非 FQDN 格式的名称,即从数据库返回单个单词名称,例如“invalid”。
select name from MYTABLE
where name RLIKE '^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.){2,}([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9]){2,}$'
我已经查看了https://dev.mysql.com/doc/refman/5.6/en/regexp.html和https://www.geeksforgeeks.org/mysql-regular-expressions-regexp/但可能有一些我我失踪了。
如何使用 RLIKE 运算符让该正则表达式在 MYSQL 中工作?或者,在本机查询 MYSQL 以返回 FQDN 形式的名称时,我可以使用什么正则表达式?