网站建设是怎么挣钱的,怎么在国际网站做推广,WordPress仿站助手,西渡网站建设ZT: http://www.cnblogs.com/Laser_Lu/archive/2005/04/21/142605.html哈哈#xff0c;继 昨天的那个正则表达式 之后又写了一个更长的Regular Expression#xff0c;全长527#xff0c;是用于查找出所有的XHTML/HTML的标记外面的所有空格#xff0c;并将之转换为 的。 希望…ZT: http://www.cnblogs.com/Laser_Lu/archive/2005/04/21/142605.html 哈哈继 昨天的那个正则表达式 之后又写了一个更长的Regular Expression全长527是用于查找出所有的XHTML/HTML的标记外面的所有空格并将之转换为nbsp;的。 希望这个能够解决dudu提的一个cnblogs的bug即使不能解决问题也算是对System.Text.RegularExpression.Regex的一个练笔了 (?:(?:\(?:Style)(?:\s(?:[\w-])(?:(?:[^\s\\]*|\[\s\S]*?\|\[\s\S]*?\))?)*\s*(?:/)?\)(?:[\s\S]*?)(?:\/(?:Style)\))|(?:(?:\(?:script)(?:\s(?:[\w-])(?:(?:[^\s\\]*|\[\s\S]*?\|\[\s\S]*?\))?)*\s*(?:/)?\)(?:[\s\S]*?)(?:\/(?:script)\))|(?:\!(?:[\w-])(?:\s(?:[\w-]|\[\s\S]*?\|\[\s\S]*?\))*\s*\)|(?:\!--[\s\S]*?--\)|(?:\(?:[\w-])(?:\s(?:[\w-])(?:(?:[^\s\\]*|\[\s\S]*?\|\[\s\S]*?\))?)*\s*(?:/)?\)|(?:\/(?:[\w-])\)|(?:\!\[CDATA\[(?:[\s\S]*?)\]\]\)|(?:(?:(?blank[ ])|[^ \\])) 这个正则表达式虽然很长但可不是我用手code出来的哦是我写的程序产生的代码如下 public static string ReplaceSpace(string content) { string tag (?:[\w-:]); string attribute (?:[\w-:])(?:(?:[^\s\\]*|\[\s\S]*?\|\[\s\S]*?\))?; string name (?:[\w-:]); string argument (?:[\w-:]|\[\s\S]*?\|\[\s\S]*?\); string beginningTag (?:\ tag (?:\s attribute )*\s*(?:/)?\); string endingTag (?:\/ tag \); string xmlComment (?:\!--[\s\S]*?--\); string xmlDirective (?:\! name (?:\s argument )*\s*\); string xmlCData (?:\!\[CDATA\[(?:[\s\S]*?)\]\]\); string styleBlock (?:(?:\(?:Style)(?:\s attribute )*\s*(?:/)?\)(?:[\s\S]*?)(?:\/(?:Style)\)); string scriptBlock (?:(?:\(?:script)(?:\s attribute )*\s*(?:/)?\)(?:[\s\S]*?)(?:\/(?:script)\)); string xmlLiteral (?:(?:(?blank[ ])|[^ \\])); string pattern styleBlock | scriptBlock | xmlDirective | xmlComment | beginningTag | endingTag | xmlCData | xmlLiteral; Regex r new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled); MatchCollection mc r.Matches(content); StringBuilder sb new StringBuilder(content.Length 1024); foreach (Match m in mc) { if (m.Groups[blank].Captures.Count 0) { sb.Append(m.Value.Replace( , nbsp;)); } else { sb.Append(m.Value); } } return sb.ToString(); } 最后再给个更长的全长765正则表达式这个算是我写的最长的正则表达式了。其实上面给出的第一个Regex是下面这个的一个专用于捕获blank的简化版本。 虽 然长但很有用可以解析出整个XHTML/HTML页面的所有元素和结构来解析后的内容都分别保存在named groups中了可以通过match.Groups[name];来提取比如match.Groups[tag];match.Groups [attribute];match.Groups[Style_Block;match.Groups[XML_Comment];等感 兴趣的不妨试一试就知道了 (?#Copyright 2005, by Laser Lu.)(?Style_Block(?begin\(?tagstyle)(?:\s(?attribute[\w-:])(?:(?value[^\s\\]*|\[\s\S]*?\|\[\s\S]*?\))?)*\s*(?:/)?\)(?body[\s\S]*?)(?end\/\ktag\))|(?Script_Block(?begin\(?tagscript)(?:\s(?attribute[\w-:])(?:(?value[^\s\\]*|\[\s\S]*?\|\[\s\S]*?\))?)*\s*(?:/)?\)(?body[\s\S]*?)(?end\/\ktag\))|(?XML_Directive\!(?name[\w-:])(?:\s(?argument[\w-:]|\[\s\S]*?\|\[\s\S]*?\))*\s*\)|(?XML_Comment\!--[\s\S]*?--\)|(?Beginning_Tag\(?tag[\w-:])(?:\s(?attribute[\w-:])(?:(?value[^\s\\]*|\[\s\S]*?\|\[\s\S]*?\))?)*\s*(?:/)?\)|(?Ending_Tag\/(?tag[\w-:])\)|(?XML_CDATA\!\[CDATA\[(?data[\s\S]*?)\]\]\)|(?XML_Literal(?:(?blank[ ])|[^ \\])) 关于以上的两个Regex的相关说明应该说功能还是比较强大的了 1。这两个正则表达式能够解析最好是HTML/XHTML格式如果是其他格式的字符串有可能会运行不正常 2。支持识别的标记有普通的HTML标记!--HTML注释--!XML指令![CDATA[ ... ]]标记或指令的标识符支持[a-zA-Z0-9_-:] 3。支持namevalue和单独一个name的attribute能够识别出或包括的属性值 4。针对style/style和script/script标记包含的内容进行特殊处理也就是所有的CSS和Script代码将原封不动的作为整体捕获。 转载于:https://www.cnblogs.com/junmorn/archive/2006/02/23/336552.html