在if-else中使用正则表达式

时间:2014-07-04 04:20:14

标签: regex bash

我知道这里肯定已经涵盖了......但我是正则表达式的新手。

我试图在if-else语句中使用正则表达式 但没有达到正确的价值。

我正在尝试将输入的字符串与正则表达式[a-z][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9]

匹配

这是代码:

#!/bin/bash

echo "Please Enter the string starting with an 'ALPHABET' and the other characters can be 'ALPHA NUMERIC'"
read str

if ("$str" == '[a-z][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9]');
then
echo "Correct"
else 
echo "Incorrect"
fi

无论我给出什么价值,我都会得到不正确的......

2 个答案:

答案 0 :(得分:2)

要匹配bash中的正则表达式,您需要使用=~运算符。

if [[ $str =~ ^[a-z][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9]$ ]];
then
    echo "Correct";
else 
    echo "Incorrect";
fi

答案 1 :(得分:1)

我严重怀疑这是有效的bash语法。

首先,bash使用=~运算符。

但这并不能完全解决你的问题。 if中的bash子句位于方括号之间,bash对空格也非常敏感。一个工作计划是:

#!/bin/bash

echo "Please Enter the string starting with an 'ALPHABET' and the other characters can be 'ALPHA NUMERIC'"
read str

if [[ $str =~ ^[a-z][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9]$ ]];
then
    echo "Correct";
else 
    echo "Incorrect";
fi

请注意,正则表达式不是字符串。此外,代码修改了正则表达式,前面是^,最后是$。这会强制bash匹配整个字符串


关于你的正则表达式:它与程序中的描述不匹配。您要求以[A-Za-z]开头的字符串,然后可选择一个或多个字母字符。正确的正则表达式是:

[A-Za-z][A-Za-z0-9]*

星号表示最后一个字符的零次,一次或多次重复。

相关问题