Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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
在Bash中实现Regex_Regex - Fatal编程技术网

在Bash中实现Regex

在Bash中实现Regex,regex,Regex,如果我的文本文件行有5个[A-Z 0-9]字符加逗号的任意组合,我试图抛出一个错误,如下所示: WH3Y4, H7UF5, WH3Y4 test H7UF5 test 但我的代码显示了错误,即使文本行是这样的,逗号后面有空格和单词: WH3Y4, my test H7UF5, your test 如果我了解如何做到这一点,我在下面使用的正则表达式应该可以工作: ^ to indicate the beginning of the text line [A-Z0-9]{5} to indi

如果我的文本文件行有5个[A-Z 0-9]字符加逗号的任意组合,我试图抛出一个错误,如下所示:

WH3Y4,
H7UF5,
WH3Y4 test
H7UF5  test
但我的代码显示了错误,即使文本行是这样的,逗号后面有空格和单词:

WH3Y4, my test
H7UF5, your test
如果我了解如何做到这一点,我在下面使用的正则表达式应该可以工作:

^ to indicate the beginning of the text line
[A-Z0-9]{5} to indicate 5 chars of either cap letter or numbers
, to indicate they are followed by a comma
$ to indicate the end of the text line
因此,理论上,当它在同一行遇到逗号后的任何文本时,它不应该产生错误,但事实就是这样:

if ! [[ $myText =~ ^[A-Z0-9]{5},$ ]]; then
        echo "Error"
        continue
fi
类似地,如果我想在文本如下所示时出错:

WH3Y4,
H7UF5,
WH3Y4 test
H7UF5  test
这应该行得通,但也不行:

if ! [[ $myText =~ ^[A-Z0-9]{5} *[A-Za-z]$ ]]; then
        echo "Error"
        continue
fi
当我按照评论中的建议尝试时:

[[ "$myText" =~ ^[A-Z0-9]{5},\$ ]] 
它会为此产生一个错误,因为它应该:

WH3Y4, 
H7UF5,
但也会为此产生错误,因为它不应该:

WH3Y4, my test
H7UF5, your test

我认为$的意思是表示行的结尾,但是如果行继续包含更多字符,那么它就不应该与错误条件匹配。

您的代码似乎没有实现您想要的。你说

I am trying to throw an error if my text file lines have any combination
of 5 [A-Z 0-9] chars followed by a comma and nothing else
但是你的代码说

if ! [[ $myText =~ ^[A-Z0-9]{5},$ ]]; then
    echo "Error"
    continue
fi
的存在
-否定运算符-表示如果字符串与正则表达式不匹配,它将打印“Error”,因此它将接受您提供的两个示例字符串-
WH3Y4、
H7UF5、
-并将拒绝任何其他内容。我想你想要的是

if [[ $myText =~ ^[A-Z0-9]{5},$ ]] ; then
    echo "Error"
    continue
fi
或者换句话说,只要去掉

在第二种情况下

if ! [[ $myText =~ ^[A-Z0-9]{5} *[A-Za-z]$ ]]; then
  echo "Error"
  continue
fi
问题是正则表达式与数据不匹配。我建议你使用

if [[ $myText =~ ^[A-Z0-9]{5},[\ A-Za-z]+$ ]]; then
  echo "Error"
  continue
fi

请注意,我删除了
在这种情况下也是如此。

我想你可以把它放在变量
re='^[a-Z0-9]{5},$'
中,然后
if![$myText=~re]];然后
所以当我尝试:[“$myText”=~^[A-Z0-9]{5},\$]]它也会在不应该的时候产生错误,当文本行的逗号后面有这样的单词:4WA16B7V722EC,testI认为$的想法是指示行的结尾,所以它基本上是逗号和行的结尾,但是如果该行继续使用更多字符,则它不应与错误条件相匹配。请参阅感谢您的帮助,但我不清楚当数据为WH3Y4(我的测试)时这是如何工作的,因为在这种情况下,它不应产生错误,但仍会产生错误。换句话说,我只希望在逗号后面没有任何内容时出现错误,但在这两种情况下都显示错误。哦,天哪,这是新手错误?!?!让我测试看看,但我怀疑你可能是对的。所以从第一个开始,[[$myText=~^[A-Z0-9]{5},$],它不会在应该的时候为[WH3Y4]产生错误,所以我被难住了。第二个也不起作用。抱歉,我认为它起作用了。