在 bash 正则表达式上评估有效的 FQDN
Evaluation of a valid FQDN on bash regex
更正 POST
@stribizhev 是对的。您不能在 bash 正则表达式中使用前瞻。
我为此使用了 grep。
#!/bin/bash
fqdn=
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 和 < +OnlineCop > 和 < tureba > 在 http://webchat.freenode.net/?nick=regex101 的帮助。
原版POST
我试图使这个正则表达式能够评估字符串是否是有效的 FQDN 但没有成功。我也进行了各种搜索,但都没有成功。
例如,我复制了一个正则表达式查找
http://regexlib.com/REDetails.aspx?regexp_id=1319
并以这种方式尝试但没有用。有什么问题吗?
#!/bin/bash
fqdn=
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
对原始文件稍作修改,您可以使用 grep -P
而不是 bash 来完成此操作:
grep -P '(?=^.{1,254}$)(^(?>(?!\d+\.)[a-zA-Z0-9_\-]{1,63}\.?)+(?:[a-zA-Z]{2,})$)'
您可以看到匹配 here。
不同之处在于,如果您有兴趣,可以将 (^(?:(?!
更改为 (^(?>(?!
以防止灾难性回溯。
zsh 支持在 [...]
和 [[...]]
中使用 -pcre-match
标志,如 StackExchange 中所述,如果您愿意,这可能是一种实现此目的的方法使用另一个 shell 而不是 bash,尽管 bash 脚本并不总是与 zsh 脚本兼容。
更正 POST
@stribizhev 是对的。您不能在 bash 正则表达式中使用前瞻。 我为此使用了 grep。
#!/bin/bash
fqdn=
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 和 < +OnlineCop > 和 < tureba > 在 http://webchat.freenode.net/?nick=regex101 的帮助。
原版POST
我试图使这个正则表达式能够评估字符串是否是有效的 FQDN 但没有成功。我也进行了各种搜索,但都没有成功。
例如,我复制了一个正则表达式查找 http://regexlib.com/REDetails.aspx?regexp_id=1319 并以这种方式尝试但没有用。有什么问题吗?
#!/bin/bash
fqdn=
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
对原始文件稍作修改,您可以使用 grep -P
而不是 bash 来完成此操作:
grep -P '(?=^.{1,254}$)(^(?>(?!\d+\.)[a-zA-Z0-9_\-]{1,63}\.?)+(?:[a-zA-Z]{2,})$)'
您可以看到匹配 here。
不同之处在于,如果您有兴趣,可以将 (^(?:(?!
更改为 (^(?>(?!
以防止灾难性回溯。
zsh 支持在 [...]
和 [[...]]
中使用 -pcre-match
标志,如 StackExchange 中所述,如果您愿意,这可能是一种实现此目的的方法使用另一个 shell 而不是 bash,尽管 bash 脚本并不总是与 zsh 脚本兼容。