正则表达式中.* 和 .*?的区别

 

.*表示贪婪匹配;

.*?表示非贪婪匹配;

 

001、R语言中

> sub("a.*b", "", c("aabab","eabbe"))    ##.*表示贪婪匹配,只要满足条件就一直匹配
[1] ""   "ee"
> sub("a.*?b","",c("aabab","eabbe"))     ##.*?表示非贪婪匹配,只匹配满足条件一次
[1] "ab"  "ebe"

 

002、shell中 并不适用

root@PC1:/home/test2# cat a.txt
aabab
eabbe
root@PC1:/home/test2# sed 's/a.*b//' a.txt       ##贪婪匹配

ee
root@PC1:/home/test2# cat a.txt
aabab
eabbe
root@PC1:/home/test2# sed 's/a.*?b//' a.txt
aabab
eabbe
root@PC1:/home/test2# sed 's/a.*\?b//' a.txt    ##加?仍然是贪婪匹配

ee

 

posted @ 2022-05-16 17:15  小鲨鱼2018  阅读(2344)  评论(0编辑  收藏  举报