从段HTML中取出width,这个标签已经得到,比如img标签。 问题: 
这个标签中的width可能写在style里.比如“width:10px”,也可能写成width="10px"。 我的正则表达式是: 
(style\s*=\s*("|').*?width\s*:(.*?)(;|"|\s))|(width\s*=\s*("|')(.*?)("|')) 基本上能正常工作,但是有2个问题 问题1:感觉效率比较低。 
问题2:如果HTML是下面这样的会得出错误的结果。 <img id="testID" src="test.gif" style="border-width:10px;" /> 哪个大虾能给出高效率的正确的表达式,谢谢了,本人刚接触正则表达式。

解决方案 »

  1.   

    width\s*[:=]\s*['"]?([^;"' ]*)注意转义
      

  2.   


    Regex rg = new Regex("[^-](?i)(width\\s*[:=]['\"]?\\d*(?:%|px)['\"]?)");匹配
    text = "<img id=\"testID\" src=\"test.gif\" style=\"border-width:10px;\" /> ";
    rg.IsMatch(text)  // falsetext = "<img id=\"testID\" src=\"test.gif\" style=\"width:10px;\" />";
    rg.IsMatch(text) //  truetext = "<img id=\"testID\" src=\"test.gif\" width=\"100%\" />";
    rg.IsMatch(text) //  truetext = "<img id=\"testID\" src=\"test.gif\" width='100px' />";
    rg.IsMatch(text) //true
      

  3.   

                string str = "<img id=\"testID\" src=\"test.gif\" style = \"border-width:10px;\" />";
                MatchCollection matches = Regex.Matches(Regex.Replace(str, "\\s", ""),
                    "(style=(\".*width:\\d+(px)?;?.*\")|(\'.*width:\\d+(px)?;?.*\'))|(width=(\"\\d+(px)?\")|(\'\\d+(px)?\'))",
                    RegexOptions.IgnoreCase);
                foreach (Match match in matches)
                {
                    Console.WriteLine(match.Value);
                }