我知道这里肯定已经涵盖了......但我是正则表达式的新手。
我试图在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
无论我给出什么价值,我都会得到不正确的......
答案 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]*
星号表示最后一个字符的零次,一次或多次重复。