实在不行了,只有在求救了,请各位高手指教了。我想匹配一个字符串,内容为一个HTML INPUT或SELECT控件,要求是INPUT或SELECT控件,属性中必须包含title属性,同时不包含id和name属性如:<INPUT class=class1  title=TITLE1 value=TEST>   匹配<INPUT readonly title=TITLE1 value=TEST>   匹配<INPUT id='INPUT1' class=class1  title=TITLE1 dataSrc="" value=TEST>  不匹配<INPUT name="INPUT1" class=class1  title=TITLE1 dataSrc="" value=TEST>  不匹配<INPUT id=INPUT1 name=INPUT1 class=class1  title=TITLE1 value=TEST>    不匹配不用区分大小写.请问正则表达式应该怎么写??看了两天正则表达式了,还是搞不明白,唉!

解决方案 »

  1.   

    看看这个能帮到你么
    http://www.netcsharp.cn/showtopic-470.aspx
      

  2.   


    谢谢你的回复,这篇文章我也看过了,这几天网上找了无数资料,不是没说到点子上就是我看不懂,呵呵。我用"(<INPUT|SELECT).*?"匹配标签开头可以,用"(?!NAME=)"来单独排除NAME属性也可以,但是连在一起用同时匹配不知为什么怎么也测试不通过
      

  3.   

    你可以好好研究一下asp.net服务器控件开发指南,它的底层就是用这个.
    有一些基类就是用正则做的.
      

  4.   

    这个试下.加上CaseIgnore 选项....
    <(?=select|input)((?!id|name)[^>])*?(?:title)((?!id|name)[^>])*>
      

  5.   

    http://regexlib.com/RETester.aspx这边可测试
      

  6.   

    5楼基本上是正确的,但是在下面的情况下,会发生错误<INPUT title='TITLE1 name' value=TEST>
    按楼主的意思,这个应该是匹配的修改了一下
    (?i)<(?=select|input)((?!id|name)[^>])*?(?:title=(?<quote>["'\s])?.*?\<quote>?)((?!id|name)[^>])*>
    重要的是,你的HTML要符合XML规范,属性值用双引号括起来
      

  7.   

    (?i)<input((?!(id|name)=)[^>])*title=((?!(id|name)=)[^>])*>
    这样就行了。
      

  8.   

    用在哪里,什么目的?用的地方和目的不同,写出的正则也不同//这个是提取的例子
    MatchCollection mc = Regex.Matches(str, @"<(?:input|select)(?=[^>]*title=)(?![^>]*(?:id|name)=)[^>]*>", RegexOptions.IgnoreCase);
    foreach (Match m in mc)
    {
        richTextBox1.Text += m.Value + "\n";
    }
      

  9.   


    @"<input(?![^>]*\s+(?:id|name)=)(?=[^>]*\s+title=)[^>]+>"
      

  10.   


    确实要考虑环境,否则这正则要写到完全通用不容易。比如说你input中会不会出现类似 **id,**name 的属性名呢?你的input中会不会出现value="id=2",value="name='a'"之类的呢?
    这些都是问题。