1. ? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。 
2.  “ba?” 匹配 “b” 或 “ba”。
匹配0次是什么意思?也就是说可以不匹配?那第二个中我也可以输入 a吗?一样返回true?
可能是我不明白如: * ? +这些特殊符号的作用域.哪位给我说一下.

解决方案 »

  1.   

    expr("ba*");
    Match("baaaaaa");//可以成功.但为什么
    match("baba");又不行了?
      

  2.   

    ?
    1, 匹配前面的模式零次或一次
    如 正则 ba? ,说明 字符串中有字符b,且b后面要么有一个a要么没有a 也就是说 ba? 匹配 b 匹配 ba 但是不匹配 baa
    2,将正则的贪婪改成懒惰
    因为正则表达式默认是贪婪的 尽可能的多匹配字符 
    如 正则 ba? 匹配字符串 asdfabaaaaaadfea 中的ba 因为 ? 表示零或一次且尽可能多的匹配 所以会匹配一次 即b后有一个a 
    当将正则改成懒惰的 即 尽可能少的匹配  这样 ba?? 这里的第一个问号是 重复字符 表示前面a匹配零或一次 
    而第二个问号就是把它前面的那个重复字符变成懒惰的 尽可能少的匹配 也就是零次 这样 ba?? 匹配字符串asdfasdfbaaaaaadfse中的b即a尽可能的少
      

  3.   

    匹配0次是什么意思?也就是说可以不匹配?那第二个中我也可以输入 a吗?一样返回true? 
    匹配0此就是跟现在一样