我对bash shell脚本(以及linux也是)很新...我尝试做一个简单的脚本,它涉及一些用户键盘给出的字符串的正则表达式。
clear
read -p "Insert e-mail > "
if [[ $REPLY =~ ^[.] ]]
then
echo "ERROR (code 1): e-mail cannot start with \".\""
elif [[ $REPLY =~ .[.]$ ]]
then
echo "ERROR (code 2): e-mail cannot end with \".\""
else
if [[ $REPLY =~ ^[0-9][0-9a-zA-Z!#$%^\&\'*+-]+$ ]] #THIS IS WHERE I NEED HELP
then
echo "Good!"
else
echo "Bad!"
fi
fi
所以我想做的是制作正则表达式
所以用户不能开始。或以...结束。 (我几乎做了那个和它的工作)...
接下来我想做的是让字符串以数字开头,我用^ [0-9](我认为这是正确的)做到了这一点
之后..string可以是数字0-9或字母a-z和A-Z或下一个字符:!#$%^&'* + - /
所以当用户输入1& (它以数字开头,其余部分以可接受的字符开头)但它不起作用..因为它需要是\& (在正则表达式中)
接下来同样的问题出现在角色'我做了什么,是再添加一个反斜杠到正则表达式公式(\'),它工作..
然后我尝试用/字符(斜线字符)做同样的事情,所以我做的是添加反斜杠/(反斜杠斜杠),但当用户输入1 /(它以数字开头,其余是可接受的字符)不幸的是它打印“坏!” ...它应该打印好!..
为什么会发生这种情况?
我试过\ /和\\ /但仍然......无法理解为什么它不起作用!
答案 0 :(得分:2)
问题是您的角色类中是否存在!
正在进行历史记录扩展。
我建议事先声明你的正则表达式:
re="^[0-9][0-9a-zA-Z\!#$%^&/*'+-]+$"
然后将其用作:
s='1/'
[[ $s =~ $re ]] && echo "good" || echo "bad"
good
答案 1 :(得分:0)
实际上,/
在字符类中工作很好:
$ [[ "1/" =~ ^[0-9][/]+$ ]]; echo $?
0