早教吧作业答案频道 -->其他-->
linux/unixshell中exprexpr"abcde":".*b"结果为2,即匹配.*b这个正则表达式时,正好ab能够匹配上,其长度为2,所以返回2.但expr"abcde":"cde"这里cde也可以理解为一个正则表达式,但为什么返回值是0呢,明
题目详情
linux/unix shell 中expr
expr "abcde" :".*b"
结果为2,即匹配.*b这个正则表达式时,正好ab能够匹配上,其长度为2,所以返回2.
但 expr "abcde" :"cde"
这里cde也可以理解为一个正则表达式,但为什么返回值是0呢,明明能够匹配到cde这个串嘛?
即echo "abcde" | grep 'cde' 明明 是可以匹配到的么?为什么expr不行?
expr "abcde" :".*b"
结果为2,即匹配.*b这个正则表达式时,正好ab能够匹配上,其长度为2,所以返回2.
但 expr "abcde" :"cde"
这里cde也可以理解为一个正则表达式,但为什么返回值是0呢,明明能够匹配到cde这个串嘛?
即echo "abcde" | grep 'cde' 明明 是可以匹配到的么?为什么expr不行?
▼优质解答
答案和解析
个人认为,就是完全匹配与部分匹配的差别.
grep 只要字符串中有部分能够与正则匹配即可,并且会输出匹配的一整行.帮助里这样讲:
grep searches the named input FILEs (or standard input) for lines containing (注意,是containing) a match to the given PATTERN. By default, grep prints the matching lines.
如果你在终端里正确设置了颜色显示,那么可以看到:
echo "abcde" | grep "cde" 结果输出 abcde,其中cde是高亮红色显示的(只匹配了部分).
echo "abcde" | grep ".*cde" 结果也是输出 abcde,其中abcde全是高亮红色显示的.
这表示grep是部分匹配的,只要有部分字符串匹配就OK.
expr STRING : REGEXP 则是完整匹配,输出最后匹配的那个位置(anchor).帮助里这样说的:
STRING : REGEXP
anchored pattern match of REGEXP in STRING
规定了:后面必须跟正则表达式,用于格式匹配.
.*b 是正则表达式,可用于匹配任何以b结尾的字符串.
但“cde”如果被用作完全匹配的话,就是必须匹配以c开头的字符串,显然匹配不到,因为:前的字符串以a开头.^_^
如果改为 expr "cdeab" : "cde" ,这样就可以匹配成功并且返回3.
看看源码应该能更清楚内部实现方式的区别.我没看过,因此也不好多说了.以上纯属个人看法,仅供探讨.
grep 只要字符串中有部分能够与正则匹配即可,并且会输出匹配的一整行.帮助里这样讲:
grep searches the named input FILEs (or standard input) for lines containing (注意,是containing) a match to the given PATTERN. By default, grep prints the matching lines.
如果你在终端里正确设置了颜色显示,那么可以看到:
echo "abcde" | grep "cde" 结果输出 abcde,其中cde是高亮红色显示的(只匹配了部分).
echo "abcde" | grep ".*cde" 结果也是输出 abcde,其中abcde全是高亮红色显示的.
这表示grep是部分匹配的,只要有部分字符串匹配就OK.
expr STRING : REGEXP 则是完整匹配,输出最后匹配的那个位置(anchor).帮助里这样说的:
STRING : REGEXP
anchored pattern match of REGEXP in STRING
规定了:后面必须跟正则表达式,用于格式匹配.
.*b 是正则表达式,可用于匹配任何以b结尾的字符串.
但“cde”如果被用作完全匹配的话,就是必须匹配以c开头的字符串,显然匹配不到,因为:前的字符串以a开头.^_^
如果改为 expr "cdeab" : "cde" ,这样就可以匹配成功并且返回3.
看看源码应该能更清楚内部实现方式的区别.我没看过,因此也不好多说了.以上纯属个人看法,仅供探讨.
看了 linux/unixshel...的网友还看了以下:
1.甲、乙两地相距1千米,某人从甲地到乙地每小时走6千米,但返回时每小时走3千米.这人往返甲、乙两 2020-05-17 …
A、B两点相距S,将S平均分为n等份,今让一个物体(可看成质点)从A点由静止开始向B做匀加速运动, 2020-06-04 …
若从1,2,3,…,n中任取5个两两互素的不同的整数a1a2a3a4a5,其中总有一个整数是素数, 2020-06-15 …
假如你的速度超过光速,你能返老还童吗?我觉科幻电影里的时光倒流是不可能的.尽管你的速度超过了光速, 2020-06-18 …
临窗看柳今年春天,虽然春寒料峭,但柳枝仍早早返绿,一夜之间,新绿满枝,煞是可爱.但我因为竞选课代表 2020-06-18 …
一道物理题.某人划船逆流而上,当船经过一桥时,船上一小木块掉在河水里,但一直航行至上游某处时此人才发 2020-11-10 …
“长生不老”是古代帝王的幻想,但“返老还童”在未来不再是梦.目前一些生物学家在做小白鼠的研究课题时, 2020-11-22 …
摩尔质量中n与M的关系n=N/啊复加多罗常数n=m/MN/啊复加多罗常数=m/M这个我理解...但是 2020-12-14 …
某人划船逆流而上,当船经过一桥时,船上一小木块掉在河水里,但一直航行至上游某处此人才发现,便立即返航 2021-01-15 …
现在设质数为n,一个数为i,余数为r.先用i除n,得到余数r.判断r是否为0.若为0,则n不为0,则 2021-02-13 …