Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何检查字符串是否与域的字符串匹配_Regex_Bash_Shell - Fatal编程技术网

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代码集中的问题中的正则表达式。