求助: 正则表达式中的‘+’
发表于 : 2012-02-22 21:36
代码: 全选
1 #!/bin/sh
2
4 case $1 in
5 [0-9]+)
6 echo "Agreed"
7 ;;
11 *) ;;
12 esac
case语句支持的正则表达式是什么标准啊?

代码: 全选
1 #!/bin/sh
2
4 case $1 in
5 [0-9]+)
6 echo "Agreed"
7 ;;
11 *) ;;
12 esac
代码: 全选
1 #!/bin/sh
2
4 case $1 in
5 [0-9]*)
6 echo "Agreed"
7 ;;
11 *) ;;
12 esac
好像是我高估了case语句的能力,naturalaw 写了:前面提醒过是通配符嘛。:em20
[0-9]* 数字开头即可
通配符你懂的,正则的*表示0次或者0次以上
没有学好基本功。。双分号“;;”表示命令序列结束。
• 匹配模式中可是使用方括号表示一个连续的范围,如[0-9];使用竖杠符号“|”表示或,也可以使用通配符*。
匹配以n开头的所有情况: n*
匹配yes的所有字母大小不同的情况: [yY][eE][sS]
但不支持{}匹配,因为模板可以使用 | 就可以达到目的。
• 最后的“*)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“*)”后
的命令序列。
代码: 全选
1 #!/bin/sh
2 set -o extglob
4 case $1 in
5 +([0-9]) )
6 echo "Agreed"
7 ;;
11 *) ;;
12 esac
提示 Illegal option -o extglobaerofox 写了:代码: 全选
1 #!/bin/sh 2 set -o extglob 4 case $1 in 5 +([0-9]) ) 6 echo "Agreed" 7 ;; 11 *) ;; 12 esac
恩,多个匹配的时候是不是用if..elif..else的句型。tusooa 写了:代码: 全选
if [[ $1 =~ [0-9]+ ]] ; then echo Agreed fi
恩,有用!
Bash Shell有个extglob选项,开启之后Shell可以另外识别出5个模式匹配操作符,能使文件匹配更加方便。
开启方法很简单,使用shopt命令:shopt -s extglob
关闭,使用shopt命令:shopt -u extglob
开启之后,以下5个模式匹配操作符将被识别:
?(pattern-list) - 所给模式匹配0次或1次; *(pattern-list) - 所给模式匹配0次以上包括0次;+(pattern-list) - 所给模式匹配1次以上包括1次; @(pattern-list) - 所给模式仅仅匹配1次;!(pattern-list) - 不匹配括号内的所给模式。