Regex 如何检查字符串是否与域的字符串匹配
我已经编写了一段代码来测试字符串是否与以下域匹配:Regex 如何检查字符串是否与域的字符串匹配,regex,bash,shell,Regex,Bash,Shell,我已经编写了一段代码来测试字符串是否与以下域匹配: host=$1 if [[ $host =~ ^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$ ]] ; then echo "it is a domain!" fi host=$1 如果[[$host=~^((?!-)[A-Za-z0-9-]{1,63}(?)? 在来自的帮助下,但出于某种原因,上述方法不起作用 您知道为什么吗?Bash regex没有lookaround,您
host=$1
if [[ $host =~ ^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$ ]] ; then
echo "it is a domain!"
fi
host=$1
如果[[$host=~^((?!-)[A-Za-z0-9-]{1,63}(?)?
在来自的帮助下,但出于某种原因,上述方法不起作用
您知道为什么吗?Bash regex没有lookaround,您可以将Perl regex与grep
一起使用:
#!/bin/bash
if grep -oP '^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\.)+[A-Za-z]{2,6}$' <<< "$1" >/dev/null 2>&1;then
echo valid
else
echo invalid
fi
!/bin/bash
如果grep-oP'^((?!-)[A-Za-z0-9-]{1,63}(?我认为bash regex不支持lookarounds。并且不允许在双引号内使用regex。我尝试过不使用引号,但仍然不起作用!耶,bash不支持lookarounds。您可以使用perl.“正则表达式”不是一种特定的语言,而是一种范例。如果你有一个java语言写的对象,你就不能复制粘贴到C++。如果你有一个在PCRE中写的正则表达式,你就不能复制粘贴到IE。是的,我现在明白了我现在使用的是从BASH代码集中的问题中的正则表达式。