X*? 必须包含一个X,但不一定是第一个字母 例如 abcX
X*  可能一个X都没有应该是这样吧,我没有试过

解决方案 »

  1.   

    好象不是。比如我有一个Pattern
    "(2004-[01][0-9]-[1-3][0-9] [0-9][0-9]:[0-9][0-9]:)[^\\(]*\\(([0-9]{11})—>(.*?)\\):MsgContent=(.*?) "
    字符串:
    2004-03-18 12:59:接收(136********—>654321):MsgContent=DELIVRD040 sdsdfsfasfsdf @MsgID=031812 @MsgLevel=0 @ServiceID=-QZ @MsgFormat=0 @IsReply=1 @MsgLen=60
    2004-03-18 13:23:接收(139********—>123456):MsgContent=DELIVRD04sdfsadfas @ MsgID=0318 @MsgLevel=0 @ServiceID=-QZ @MsgFormat=0 @IsReply=1 @MsgLen=60
    2004-03-18 13:29:接收(139********—>987654):MsgContent=000000 @ 
    如果使用*?的话就可以按照我的要求匹配出3条纪录。但如果把*?换成*的话。就只有一条纪录(就是上面所有字符串)。
    所以我想问问*?和*有什么区别
      

  2.   

    X*?表示X后面可以有一个任意的字符也可以没有字符.
    X* 表示X后面必须有一个任意的字符.
    ?是一种通配符,表示它前面的字符可以匹配一次或0次.
      

  3.   

    X*属于贪婪匹配
    X*?属于最小匹配例如:X*Z  在匹配 XYZYZ时 匹配的是 YZY
    X*?Z  在匹配 XYZYZ时 匹配的是 Y
      

  4.   

    topglory() 说得很清楚啦*、+和?限定符都是贪婪的,因为它们会尽可能多的匹配文字,只要在它们的后面加上一个?就可以实现非贪婪或最小匹配