分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
//把所有HTML标签找出来
哈哈,继 昨天的那个正则表达式 之后又写了一个更长的Regular Expression,全长527,是用于查找出所有的XHTML/HTML的标记外面的所有空格,并将之转换为 的。 希望这个能够解决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>[ ]+)|[^ /</>])+)
再给个更长的(全长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>/<(?<tag>style)(?:/s+(?<attribute>[/w-:]+)(?:=(?<value>[^/s/>/<]*|/"[/s/S]*?/"|/'[/s/S]*?/'))?)*/s*(?:/)?/>)(?<body>[/s/S]*?)(?<end>/<//k<tag>/>))|(?<Script_Block>(?<begin>/<(?<tag>script)(?:/s+(?<attribute>[/w-:]+)(?:=(?<value>[^/s/>/<]*|/"[/s/S]*?/"|/'[/s/S]*?/'))?)*/s*(?:/)?/>)(?<body>[/s/S]*?)(?<end>/<//k<tag>/>))|(?<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。支持name=value和单独一个name的attribute,能够识别出""或''包括的属性值;
4。针对<style></style>和<script></script>标记包含的内容进行特殊处理,也就是所有的CSS和Script代码将原封不动的作为整体捕获。
//非htmt标记中的空格转换成“ ”
正则表达式代码如下:
{
string findstr = " (?<fore>(?:(?:[^< ])*(?:<(?:!--(?:(?:[^-])*(?:(?=-->)|-))*--|(?:[^>])+)>)?)*)[ ](?<back>(?:(?:[^< ])*(?:<(?:!--(?:(?:[^-])*(?:(?=-->)|-))*--|(?:[^>])+)>)?)*) " ;
string replacestr = " ${fore} ${back} " ;
string targetstr = System.Text.RegularExpressions.Regex.Replace(content,findstr,replacestr,System.Text.RegularExpressions.RegexOptions.IgnoreCase);
return targetstr;
}
这个正则表达式是一位朋友提供的,主要功能是将字符串中非htmt标记中的空格转换成“ ”, 目前我还没查出这个正则表达式中的问题,请熟悉正则表达式的朋友指点。
//获取URL
string regex="href=[///"///'](http://|//.///|///)?//w+(//.//w+)*(/w+(//.//w+)?)*(///|//?//w*=//w*(&//w*=//w*)*)?[///"///']";
preg_match_all('/<a.*?(?: |//t|//r|//n)?href=[/'"]?(.+?)[/'"]?(?:(?: |//t|//r|//n)+.*?)?>(.+?)<//a.*?>/sim', $strSource, $strResult, PREG_PATTERN_ORDER);
//PHP正则相关文章
[专题] 正则表达式在PHP中的应用 [文章] 正则表达式中的特殊字符 [文章] 正则表达式使用详解 [文章] 在PHP中使用与Perl兼容的正则表达式 [文章] 揭开正则表达式语法的神秘面纱 [文章] MySql正则表达式的描述 [Classes] Search [下载] Mastering Regular Expressions (英文PDF) [常见问答] 如何使用PHP中的正则表达式 [常见问答] 正则表达式的基本语法 [常见问答] 怎么将单引号“'”前面加上一个反斜杠? [常见问答] 能否在SQL语句中使用正则表达式? [常见问答] 如何用正则表达式来表示中文?
//了解更多基于Perl样式的正则:http://www.pcre.org
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/2e19ffb3303a490d20ea5d00dd397156.gif)