Bash正则表达式不接受斜杠

时间:2015-11-24 20:37:00

标签: regex linux bash

我对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 /(它以数字开头,其余是可接受的字符)不幸的是它打印“坏!” ...它应该打印好!.. 为什么会发生这种情况? 我试过\ /和\\ /但仍然......无法理解为什么它不起作用!

2 个答案:

答案 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