正则表达式的一点小疑点,望赐教

正则表达式的一点小问题,望赐教!
刚学习正则表达式,遇到一个问题,想不通。请大家帮忙

string sss="abccccc";
string  zzstr="abc*?";

Match mc = Regex.Match(sss, zzstr);
string ss = mc.Value;

这里取消贪婪模式后,返回的结果是ab,可为什么把正则表达式改为 “abc*?$”,结果就变成了“abccccc”??
这里的$还是被理解成要求一个c结尾吗
为什么“?”不起作用了,返回5个 c而不是1个c或者是不返回c?

菜鸟一枚,问题可能不值一提,希望大家能耐心解答,感激不尽~

------解决方案--------------------
想要以c结尾,就不要 *?
------解决方案--------------------
1楼说的对
------解决方案--------------------
从你的测试数据来看
 “abc*?$”  加不加$  匹配的结果都是一样的

^ $ 一般用于数据格式校验,而不是数据匹配

abc*? 匹配ab是正常的
abc+? 才是匹配abc
------解决方案--------------------
引用:
刚学习正则表达式,遇到一个问题,想不通。请大家帮忙

string sss="abccccc";
string  zzstr="abc*?";

Match mc = Regex.Match(sss, zzstr);
string ss = mc.Value;

这里取消贪婪模式后,返回的结果是ab,可为什么把正则表达式改为 “abc*?$”,结果就变成了“abccccc”??
这里的$还是被理解成要求一个c结尾吗
为什么“?”不起作用了,返回5个 c而不是1个c或者是不返回c?

菜鸟一枚,问题可能不值一提,希望大家能耐心解答,感激不尽~


*表示c可以重复0到无限次;
?表示c可以重复0次或者1次;
这里你的逻辑就错乱了。
$表示从结尾匹配。

所以那样写,abc,abcc,abccc,abccccc.....都可以匹配啊。
------解决方案--------------------
$是匹配结尾,本身并不对应到C字符上.
------解决方案--------------------
这里取消贪婪模式后,返回的结果是ab,可为什么把正则表达式改为 “abc*?$”,结果就变成了“abccccc”??
这里的$还是被理解成要求一个c结尾吗
为什么“?”不起作用了,返回5个 c而不是1个c或者是不返回c?

首先看abc*
这个表示,以ab开头(不一定是整个字符串的开头),并且后面的c可以匹配任意次数,0也可以
就是说以下几个字符串都会匹配成功
"abccc","ab","1ab","1abcedf"

再看abc*?
这里加上了?变成贪婪模式,贪婪模式表示尽可能少的匹配,那么这个尽可能少是怎么样一个少法呢,这要看?前面的限定符
这里的问号前面是*,*表示最少0次,最多无限次,所以这里的贪婪模式的尽可能少就是0次
所以这个匹配字符串"abccccc"的结果就是ab,c不需要匹配

再举个例子,如果正则是这样 abc{2,3}?
这里?前面的限定符表示最少2次匹配,所以这里的贪婪模式为最少2次来匹配
所以匹配"abccccc"的结果是abcc 
如果不加?   abc{2,3}匹配出来的就是最少3个c  为abccc

然后再看 abc*?$
这里加上了$  表示一直匹配到字符串结束
所以,这里的规则就是  以ab开头(不一定是整个字符串的开头),一直到字符串结尾,中间匹配c任意次数,也是尽可能少
好吧这个我也讲不太清楚,感觉?和$没有搭配的必要,因为$是唯一的