(?(expression)yes|no) 
如果表达式在此位置匹配,则与“yes”部分匹配;否则,与“no”部分匹配。“no”部分可省略。表达式可以是任何有效的子表达式,但它将变为零宽度断言,因此该语法等效于 (?(?=expression)yes|no)。请注意,如果表达式是命名组的名称或捕获组编号,则替换构造将解释为捕获测试(在本表的下一行对此进行了描述)。若要避免在这些情况下产生混淆,则可以显式拼出内部 (?=expression)。 
-------------------------------------------------------------
以上是msdn的解释
我用以下例子
匹配模式(?(?=a)tt|bbb)
匹配字符串 atta匹配结果  <空>
按我的预想得出tt
----------------------------------------------------------请各位说说自己的理解,谢谢

解决方案 »

  1.   

    2、(?(expression)yes-expression|no-expression),其中no-expression为可选项,意为,如果expression成立,则要求匹配yes-expression,否则要求匹配no-expression
    (?(a)att|bbb)
    ?(a)当为a时候时候要求配合att 当不为a要求匹配bbb例1:att
    正则(?(a)att|bbb)
    捕获 1 :
        att
    ==============================华丽的分隔线===============================例2:bbb123
    正则(?(a)att|bbb)
    捕获 1 :
        bbb
    ==============================华丽的分隔线===============================
      

  2.   

    想得到TT何必要做判断
    用(?<=a)(tt|bbb)
      

  3.   

    如果模式采用(?(b)att|bbb)
    匹配字符串为batt
    为什么匹配结果为空?难道说expression的内容一定要是yes-expression部分的开头?
    比如(?(ba)batt|bbb)
    babatt
    可以捕获batt
    ???
      

  4.   

    如果模式采用(?(b)att|bbb)
    匹配字符串为batt
    为什么匹配结果为空?
    ====================
    (?(b)att|bbb)
    这(b)里的b只是判断 不做匹配 
    必须(?(b)batt|bbb)
      

  5.   

    难道说expression的内容一定要是yes-expression部分的开头?
    ==========
    也可以不
    例子:
    开始你好吗?
    开始我可以吗?
    开始你神经病吗?
    开始我随便吗?
    正则:(?(?<=你)好|我可以)吗
    捕获 1 :
        好吗
    ==============================华丽的分隔线===============================
    捕获 2 :
        我可以吗
    ==============================华丽的分隔线===============================
      

  6.   

    明白了,混淆概念了,多谢大哥  
    petshop4(世界上有10种人,一种懂得什么是二进制 ,一种不懂) ( ) 信誉:100     
      

  7.   

    lz这么早下班阿……羡慕啊啊啊啊啊a
      

  8.   

    TO  kkbspod(我被可乐淹死了) 
    客气了 一起研究 一起学习