我在看鸟哥的书shell 脚本章节的时候,遇到一个问题 想请教下大家。 问题如下
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
# 1. 告知使用者这支程序的用途,并且告知应该如何输入日期格式?
echo "This program will try to calculate :"
echo "How many days about your demobilization date..."
read -p "Please input your demobilization date (YYYYMMDD ex>20050401): " date2
# 2. 测试一下,这个输入的内容是否正确?利用正规表示法?~
date_d=`echo $date2 |grep '[0-9]\{8\}'`
if [ "$date_d" == "" ]; then
echo "You input the wrong format of date...."
exit 1
fi
这里 date_d=`echo $date2 |grep '[0-9]\{8\}'` 表示的意思是 显示任意数字重复8次的行。但是我发现我给date2 赋值的时候 只要是8个以上的数字的字符串 [ "$date_d" == "" ] 返回值都是true,那八个数字不是重复的也是true
所以我想问这是为什么
[ 本帖最后由 boyzzj2008 于 2008-11-8 22:48 编辑 ]
dlchengzi 于 2014-05-06 17:48:10发表:
楼主很厉害!
dlchengzi 于 2014-05-06 17:44:43发表:
楼主很厉害!
qxfsy 于 2014-02-14 23:38:46发表:
学习中
chushihua 于 2014-01-12 19:54:30发表:
顶......
楼下跟上.....
feihong314 于 2014-01-02 14:18:38发表:
没看懂
jingya2013 于 2013-11-25 18:50:13发表:
下载看看,能行不
nyszhgz14b 于 2013-11-21 11:05:33发表:
刚看到这里,想下下来,木钱!
boyzzj2008 于 2008-11-22 13:11:38发表:
我 有个 文件 是 讲 正则 表达式 的 刚刚 找到 的 楼上 要 的 话 可以 下载
lidan-happy 于 2008-11-12 18:41:35发表:
我对正则表达式 也不太明白有文档给我一个行吗
he110y@163.com
谢谢
boyzzj2008 于 2008-11-08 22:47:32发表:
至于为什么是八位以上数字就可以这点我明白了 ,但是为什么匹配到的这八位数组是任意的数字呢?说的是贪婪模式,可能是因为我没学过正则表达式的高级规则。但是我今天看了高级模式,还是没学会高级模式中的贪婪模式,为什么是任意的八位数字,不是要重复任意一个数字八次吗。这与我再学习碰到的问题一样,比如有这么一个字符串 "dxxxdxxxd"
表达式一:(d)(\w+) ,为什么\w+匹配到的是 第一个d 后面的所有字符串 也就是 xxxdxxxd
yezhulin1982 于 2008-11-08 10:32:04发表:
这是因为
date_d=`echo $date2 |grep '[0-9]\{8\}'`
中的
'[0-9]\{8\}'`
正则表达式中没有使用边界字符,而正则表达式又有贪婪的特性所致。
根据楼主所给的正则表达式,会匹配到0-9八位数字,但你没有对这八位数字的前面和后面字符作出限定,那么
正则表达式的贪婪性就会匹配到只要是八位数字,不管该数字的前面和后面有什么字符(有多少)都会匹配到。