在网上看到有人求助如下正则<img id="a1" src="Images\未命名.jpg"/>
<img  src="Images\未命名.jpg" id="a1"/>
<img  id=“img1” src="Images\未命名.jpg"/>
<img  src="Images\未命名.jpg"/>
<img  src="Images\未命名.jpg"  id="a1" name="a001"/>要求捕获不包含id="a1"的的<img ../>也就是说上面里
<img  id=“img1” src="Images\未命名.jpg"/>
<img  src="Images\未命名.jpg"/>符合
要求写出正则来正则

解决方案 »

  1.   

    string pattern = @"(?i)<img(?![^>]*?id=(['""]?)[^'""]*?a1[^'""]*?\1)[^>]*?>";
      

  2.   

    (?is)<img[^>]*id=.(?:(?!a1)[^>]*).[^>]*/>
      

  3.   


    不过你这个正则一个bug
    <img id="a1" src="Images\未命名.jpg"/>
    <img  src="Images\未命名.jpg" id="a1"/>
    <img  id=“img1” src="Images\未命名.jpg"/>
    <img  src="Images\未命名.jpg"  id="a1" name="a001"/>
    <img  src="Images\未命名.jpg"/><img  src="Images\未命名.jpg"  id="a1" name="a001"/>也会捕获
      

  4.   

    (?is)<img[^>]*?id=.(?:(?!a1)[^>]*?).[^>]*?/>这个可行。
      

  5.   

    string pattern=@"(?i)^<img((?!id=([""'])a1\2)[^<>])*>$";
      

  6.   

    (?i)<img(?![^>]*?id=(['"])a1\1)[^>]*?>  上面的表示匹配(?!)==>后面非
    【^>】*?表示最少右括号的位置 ,\1表示前面的相同一样的表达式(['"]) 后面同样是的。