【发布时间】:2015-10-02 14:27:26
【问题描述】:
更正的帖子
@stribizhev 是对的。您不能在 bash 正则表达式中使用前瞻。 我为此使用了 grep。
#!/bin/bash
fqdn=$1
result=`echo $fqdn | grep -P '(?=^.{1,254}$)(^(?>(?!\d+\.)[a-zA-Z0-9_\-]{1,63}\.?)+(?:[a-zA-Z]{2,})$)'`
if [[ -z "$result" ]]
then
echo "$fqdn is NOT a FQDN"
else
echo "$fqdn is a FQDN"
fi
exit
感谢@stribizhev 和 和
原帖
我试图让这个正则表达式工作来评估字符串是否是一个有效的 FQDN,但没有成功。我也进行了各种搜索,也没有成功。
例如,我复制了一个正则表达式查找 http://regexlib.com/REDetails.aspx?regexp_id=1319 并尝试过这种方式但不起作用。有什么问题?
#!/bin/bash
fqdn=$1
if [[ "$fqdn" =~ (?=^.{1,254}$)(^(?:(?!\d+\.)[a-zA-Z0-9_\-]{1,63}\.?)+(?:[a-zA-Z]{2,})$) ]]
then
echo "$fqdn is a FQDN"
else
echo "$fqdn is NOT a FQDN"
fi
exit
【问题讨论】:
-
此处描述了一个 FQDN en.wikipedia.org/wiki/Fully_qualified_domain_name。 “www.aa.com”将是一个匹配的示例。 “xxx”将不匹配。 “@#$#.com”将不匹配。
-
@stribizhev,我尝试了您的示例,但没有成功。如果行是什么?
if [[ "$fqdn" =~ ^(?=.{1,254}$)(?:(?![0-9]+\.)[a-zA-Z0-9_\-]{1,63}\.?)+(?:[a-zA-Z]{2,})$ ]] -
我认为你不能在 bash 正则表达式中使用前瞻。您将需要另一种模式。或者使用 Perl。
标签: regex string bash if-statement fqdn