在分析Html中,遇到的这个问题
我想把页面中的<input  name="" value=""> 中的name和value值全部获取出来

解决方案 »

  1.   


    Regex reg = new Regex("<input[^>]+name=\"*(?<name>[^\\s\">]+)\"*[^>]*value=\"*(?<value>[^\\s\">]+)\"*[^>]*>", RegexOptions.IgnoreCase);string html = "...";
    MatchCollection mc = reg.Matchs(html);
    foreach(Match m in mc)
    {
       string name = m.Groups["name"].Value; 
       string value = m.Groups["value"].Value;
       //... 
    }
      

  2.   

    <input.+?name="(.+?)".+?value="(.+?)".+?>
      

  3.   

    MatchCollection mc = Regex.Matches(html,@"(?is)<input.*?(?:name[^=]*=.*?(['""]?)(?<name>[^'"" ]*)\1|value[^=]*=.*?(['""]?)(?<value>[^'""]*?)\2| )+>");
    foreach(Match m in mc)
    {
        //m.Groups["name"].Value;
        //m.Groups["value"].Value;
    }
      

  4.   

    2,3楼的没考虑value和name位置交换后的情况。
      

  5.   


    给个错误例子 ^_^我测试没错
    private static void TestRegex24()
    {
        string html = "<input name=\"aa\" value=\"bb\"> ";
        MatchCollection mc = Regex.Matches(html, @"(?is)<input.*?(?:name[^=]*=.*?(['""]?)(?<name>[^'"" ]*)\1|value[^=]*=.*?(['""]?)(?<value>[^'""]*?)\2| )+>");
        foreach (Match m in mc)
        {
            Console.WriteLine(m.Groups["name"].Value);
            Console.WriteLine(m.Groups["value"].Value);
        }
    }
    结果
    aa
    bb
      

  6.   

    <input title="xxa" name="sss" value="dd" dgsd="xxx">
    将字符串换成这个?
      

  7.   


    private static void TestRegex24()
    {
        string html = "<input value=\"bb\" name=\"aa\"> ";
        MatchCollection mc = Regex.Matches(html, @"(?is)<input.*?(?:name[^=]*=.*?(['""]?)(?<name>[^'"" ]*)\1|value[^=]*=.*?(['""]?)(?<value>[^'""]*?)\2| )+>");
        foreach (Match m in mc)
        {
            Console.WriteLine(m.Groups["name"].Value);
            Console.WriteLine(m.Groups["value"].Value);
        }
    }
    换一下name 和 value的顺序,还是
    aa
    bb
      

  8.   


    确实忽略了一点。private static void TestRegex24()
    {
        //string html = "<input value=\"bb\" name=\"aa\"> ";
        string html = "<input title=\"xxa\" name=\"sss\" value=\"dd\" dgsd=\"xxx\">";
        MatchCollection mc = Regex.Matches(html, @"(?is)<input.*?(?:name[^=]*=.*?(['""]?)(?<name>[^'"" ]*)\1|value[^=]*=.*?(['""]?)(?<value>[^'""]*?)\2| |.)+>");
        foreach (Match m in mc)
        {
            Console.WriteLine(m.Groups["name"].Value);
            Console.WriteLine(m.Groups["value"].Value);
        }
    }
      

  9.   

    3楼:
    不要用'.',因为它不能表达你所期望的"任意字符",因为它不匹配换行符。而换行在html源码中是常见的,一个标签也常被换行分成两部分。4楼:
    首先,vlaue在前而name在后恐怕在html中极少见吧?就算有,我认为你的式子也太复杂了些,还不如这样呢:Regex reg = new Regex("<input[^>]+name=\"*(?<name>[^\\s\">]+)\"*[^>]*value=\"*(?<value>[^\\s\">]+)\"*[^>]*>", RegexOptions.IgnoreCase);Regex reg2 = new Regex("<input[^>]+value=\"*(?<value>[^\\s\">]+)\"*[^>]*name=\"*(?<name>[^\\s\">]+)\"*[^>]*>", RegexOptions.IgnoreCase);string html = "...";
    MatchCollection mc = reg.Matchs(html);
    MatchCollection mc2 = reg2.Matchs(html);
    foreach(Match m in mc)
    {
       string name = m.Groups["name"].Value; 
       string value = m.Groups["value"].Value;
       //... 
    }foreach(Match m in mc2)
    {
       string name = m.Groups["name"].Value; 
       string value = m.Groups["value"].Value;
       //... 
    }貌似笨了些,但简单可靠。而且便于楼主理解。
      

  10.   

      我有点疑问 如果  name属性 不是用"  '  或是不用 那么上面的正则都还可以吗?
      

  11.   


    使用一段html进行匹配,怎么只有一个结果?
      

  12.   

    <input title="xxa"  name  =  "sss" dgsd="xxx" value="dd">将此语句换成这个呢?
      

  13.   

    我测试了下
    <input type="hidden" name="source" value="" /> 这样的获取不了
      

  14.   


    Regex reg = new Regex("<input[^>]+name=\"*(?<name>[^\\s\">]*)\"*[^>]*value=\"*(?<value>[^\\s\">]*)\"*[^>]*>", RegexOptions.IgnoreCase);string html = "...";
    MatchCollection mc = reg.Matchs(html);
    foreach(Match m in mc)
    {
       string name = m.Groups["name"].Value; 
       string value = m.Groups["value"].Value;
       //... 
    }
      

  15.   


    (?is)<input.*?((name=\"(?<name>[^"]*)\" ).*?|(value=\"(?<value>[^"]*)\") .*?)\>  我这样子写的正则为什么只可以匹配value 而name 却不可以 捕获?
      

  16.   


    显然可以,value捕获为空而已。
    吧上面几个例子串起来private static void TestRegex24()
    {
        string html1 = "<input value=\"bb\" name=\"aa\"> ";
        string html2 = "<input title=\"xxa\" name=\"sss\" value=\"dd\" dgsd=\"xxx\">";
        string html3 = "<input type=\"hidden\" name=\"source\" value=\"\" />  ";
        string html = html1 + html2 + html3;
        MatchCollection mc = Regex.Matches(html, @"(?is)<input.*?(?:name[^=]*=.*?(['""]?)(?<name>[^'"" ]*)\1|value[^=]*=.*?(['""]?)(?<value>[^'""]*?)\2| |.)+?>");
        foreach (Match m in mc)
        {
            Console.WriteLine("name is : " + m.Groups["name"].Value);
            Console.WriteLine("value is : " + m.Groups["value"].Value);
        }
    }结果
    name is : aa
    value is : bb
    name is : sss
    value is : dd
    name is : source
    value is :
      

  17.   

    private static void TestRegex24()
    {
        //string html = "<input value=\"bb\" name=\"aa\"> ";
        string html = "<input title=\"xxa\" name=\"sss\" value=\"dd\" dgsd=\"xxx\">";
        MatchCollection mc = Regex.Matches(html, @"(?is)<input.*?(?:name[^=]*=.*?(['""]?)(?<name>[^'"" ]*)\1|value[^=]*=.*?(['""]?)(?<value>[^'""]*?)\2| |.)+>");
        foreach (Match m in mc)
        {
            Console.WriteLine(m.Groups["name"].Value);
            Console.WriteLine(m.Groups["value"].Value);
        }
    }
      

  18.   

    用jquery吧
    var arrinput=$("input[name='控件名称']");//得到所有指定类型的input类型集合 for循环取值
      

  19.   


    (?is)<input.*?(?:name[^=]*=.*?(['""]?)(?<name>[^'"" ]*)\1|value[^=]*=.*?(['""]?)(?<value>[^'""]*?)\2| )+>
      

  20.   


            string str = "<input title=\"xxa\" name=\"sss\" value=\"dd\" dgsd=\"xxx\">fgdgs\r\ndsg<input type=\"hidden\" name=\"source\" value=\"ss\" />dgds\r\ndgsdg<input value=\"4444\"    type=\"hidden\"  name=\"ddd\"    />";
            System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"(?is)<input.*?(?:name=(['""]?)(?<name>\w+)\1|value=(['""]?)(?<value>\w+)\2|.)+?>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
            System.Text.RegularExpressions.MatchCollection m = reg.Matches(str); //设定要查找的字符串
            for (int i = 0; i < m.Count; i++)
            {
                Response.Write(m[i].Groups["name"].ToString() +"_" +m[i].Groups["value"].ToString() + "<br>");
            }
      

  21.   

    都把问题复杂化了
    <input name="" value=""> 
    规则:
    <input\s+name="(?<NAME>.*?)"\S+value="(?<VALUE.*?>)">注:NAME和VALUE是数据库表中的字段名,对应的也就是获取的name 和 value 的值
      

  22.   

    up
    Regex reg = new Regex(@"<input\s+(?:.*?)name=""(.*?)""\S+(?:.*?)value=""(.*?)""(?:.*?)>",RegexOptions.IgnoreCase);string html = "...";
    MatchCollection mc = reg.Matchs(html);
    foreach(Match m in mc)
    {
       string name = m.Groups[1].Value; 
       string value = m.Groups[2].Value;
       //... 
    }
      

  23.   

    MatchCollection mc = Regex.Matches(myhtml, @"(?is)<input.*?(?:name[^=]*=.*?(['""]?)(?<name>[^'"" ]*)\1|value[^=]*=.*?(['""]?)(?<value>[^'""]*?)\2| )+>");
    name和value之间还有样式,怎么去除啊?