正则表达式中?和*的区别
?表示匹配前面的字符0次或1次;
*表示匹配前面的字符0次或任意多次;
001、在R语言中
> sub("a?b", "", c("aaaabxa","xxxxbxa", "xacb")) ## ?表示匹配前面字符0次或1次; a?b表示匹配b或者ab [1] "aaaxa" "xxxxxa" "xac" > sub("a*b", "", c("aaaabxa","xxxxbxa", "xacb")) ## *表示匹配前面字符0次或任意多次; a*b表示匹配:b 或者 任意多次a 再加上b [1] "xa" "xxxxxa" "xac"
002、在shell中
root@PC1:/home/test2# cat a.txt aaaabxa xxxxbxa xacb root@PC1:/home/test2# sed 's/a?b//' a.txt aaaabxa xxxxbxa xacb root@PC1:/home/test2# sed 's/a\?b//' a.txt ## sed中?需要转义, ?表示匹配前面一个字符0次或者一次 aaaxa xxxxxa xac root@PC1:/home/test2# cat a.txt aaaabxa xxxxbxa xacb root@PC1:/home/test2# sed 's/a*b//' a.txt ## *表示匹配前面一个字符0次或任意多次 xa xxxxxa xac