Regex reg = new Regex(@"(?is)<div(?:(?!id=).)*id=(['""]?)" + id  + @"\1[^>]*>(?><div[^>]*>(?<o>)|</div>(?<-o>)|(?:(?!</?div\b).)*)* (?(o)(?!))</div>")(?is)是什么意思?
(?:(?!id=).)*id=(['""]?)含义,
最好整个表达式详细解释一下 谢谢

解决方案 »

  1.   

    (?is)是模式修改符。意思是将后面的匹配模式修改成IGNORECASE和SINGLELINE,IGNORECASE就是忽略大小写,SINGLELINE就是规定特殊字符“.” 匹配任意的字符,包括换行符。有关详细可以去相关正则文档看看
      

  2.   

    ?i   匹配时不区分大小写。
    ?s 更改.的含义,使它与每一个字符匹配(包括换行符\n)。
    -------------
    (?:(?!id=).)*(?:exp)  匹配exp,不捕获匹配的文本,也不给此分组分配组号
    (?!exp)  匹配后面跟的不是exp的位置
    *               重复零次或更多次
    总结就是捕捉id=前面所有的字符
    ---------------
    id=(['""]?)
    ?  重复零次或一次
    id= 就是比配id=
    (['""]?)  就是匹配id=后面的'或者"或者没有
    http://deerchao.net/tutorials/regex/regex.htm
      

  3.   

    ?
     当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。例如,在字符串“oooo”中,“o+?”只匹配单个“o”,而“o+”匹配所有“o”。
     
    (?:pattern)
     匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配。这对于用“or”字符 (|) 组合模式部件的情况很有用。例如,'industr(?:y|ies) 是比 'industry|industries' 更经济的表达式。
     (?!pattern)
     执行反向预测先行搜索的子表达式,该表达式匹配不处于匹配 pattern 的字符串的起始点的搜索字符串。它是一个非捕获匹配,即不能捕获供以后使用的匹配。例如,'Windows (?!95|98|NT|2000)' 匹配“Windows 3.1”中的 “Windows”,但不匹配“Windows 2000”中的“Windows”。预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后。
    (?is)是模式修改符。意思是将后面的匹配模式修改成IGNORECASE和SINGLELINE,IGNORECASE就是忽略大小写,SINGLELINE就是规定特殊字符“.” 匹配任意的字符,包括换行符。*
     零次或多次匹配前面的字符或子表达式。例如,zo* 匹配“z”和“zoo”。* 等效于 {0,}。