最近由于工作项目中的需要,开始关注起了正则,初识正则,看着着急的同时又表示一头雾水。。。还好现在工作已经告一段落了,非常非常感谢坛子里面前辈的帮助,当然也有自身的学习。O(∩_∩)O

工作之余,把所用到的正则简单的整理了下,备忘,同时也给遇到类似问题的童鞋做个参考。

规则:

1.根据id获取标签里面的内容

2.获取页面中的img及img里面的属性src的内容

3.获取所有的script

4.特殊取值:如取 DATA.groupList = [{...}]里面的内容废话不多说了,直接贴代码了。。

下面这个是要用到的一个字符串:

<img class="avatar" src="/cgi-bin/getheadimg?fakeid=2391433120&amp;r=835720"><script type="text/javascript">WXM.DATA.userinfo = {};WXM.DATA = {ROOT : WXM.ROOT,userinfo : {NickName : "yoyo",FakeID : "2391433120"},nav : [{_id: 'home',name : "首页",link : '/cgi-bin/indexpage?t=wxm-index&lang=zh_CN'}],};</script><script type="json" id="json-setting">{"username":"haha","signature":"","country":"中国","province":"上海","city":"浦东新区","verifyInfo":"ready&nbsp;go?","bindUserName":""}</script><script type="text/javascript">window.WXM && (function(WXM,jq,win){ DATA.title = "用户管理"; DATA.groupList = [ { id: '0',name: defaultGroupName[0] || "默认组",num : '0'*1 },{ id: '100',name: defaultGroupName[100] || "F",num : '2'*1 } ];})(WXM,jQuery,window);</script><script type="text/javascript">WXM.DATA.userinfo = {};WXM.DATA = {ROOT : WXM.ROOT,link : '/cgi-bin/indexpage?t=wxm-index&lang=zh_CN'}]

};</script>

完整的代码如下:

C#:code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.Text.RegularExpressions;
public partial class zz : System.Web.UI.Page
{
    protected void Page_Load(object sender,EventArgs e)
    {
        //*****查找id="json-setting"的标签及内容  此处获取到的是一个script,所以无法在页面上显示文本,只有查看网页源码才能看到*****/
         string pattern = @"<(?<HtmlTag>[\w]+)[^>]*\s[iI][dD]=(?<Quote>[""']?)json-setting(?(Quote)\k<Quote>)[""']?[^>]*>((?<nested><\k<HtmlTag>[^>]*>)|</\k<HtmlTag>>(?<-nested>)|.*?)*</\k<HtmlTag>>";
        
        //*****查找 DATA.groupList = [{...}]里面的内容*****/
        //string pattern = @"(?<=DATA\.groupList\s*=\s*\[)((?<g>\[)|(?<-g>\])|[^\]\[])*(?(g)(?!))(?=\])";

         //*****查找出所有的script*****//
         string pattern1 = @"<script[^>]*?>.*?</script>|<script[^>]*>[\d\D]*?</script>";
         
        //******查找图片******//
         //string pattern2 = "<img class=\"(.*?)\".*/>"; //帅选出img
         //string pattern2 = "src=\"(?<value>.*?)\""; //获取图片src的值

         MatchCollection m = Regex.Matches(GetHtm(),pattern,RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline);
         string str = "";
         if (m.Count > 0)
         {
             str = m[0].Groups[0].Value;
             Response.Write("获取成功!" + str);
         }
         else
         {
             Response.Write("获取失败!");
         }

         Fn(GetHtm(),pattern1);
         //Fn(GetHtm(),pattern2);
    }

    public void Fn(string strhtm,string pattern)
    {
        MatchCollection m = Regex.Matches(strhtm,RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline);
        string str = "";
        if (m.Count > 0)
        {
            foreach (Match mc in m)
            {
                str+= mc.Value;
                //str+ = mc.Groups["value"].Value; //获取图片src的值

            }
            Response.Write("获取成功!" + str);
        }
        else
        {
            Response.Write("获取失败!");
        }
    }
 
     public string GetHtm()
    {
        StringBuilder sb = new StringBuilder();
        sb.AppendLine("<img class=\"avatar\" src=\"/cgi-bin/getheadimg?fakeid=2391433120&r=835720\" />");
        sb.AppendLine("<script type=\"text/javascript\">");
        sb.AppendLine("WXM.DATA.userinfo = {};");
        sb.AppendLine("WXM.DATA = {");
        sb.AppendLine("ROOT : WXM.ROOT,");
        sb.AppendLine("userinfo : {");
        sb.AppendLine("NickName : \"yoyo\",");
        sb.AppendLine("FakeID : \"2391433120\"");
        sb.AppendLine("},");
        sb.AppendLine("nav : [");
        sb.AppendLine("{");
        sb.AppendLine("_id: 'home',");
        sb.AppendLine("name : \"首页\",");
        sb.AppendLine("link : '/cgi-bin/indexpage?t=wxm-index&lang=zh_CN'");
        sb.AppendLine("}],");
        sb.AppendLine("");
        sb.AppendLine("};");
        sb.AppendLine("");
        sb.AppendLine("</script>");
        sb.AppendLine(" <script type=\"json\" id=\"json-setting\">");
        sb.AppendLine("{\"username\":\"haha\",\"signature\":\"\",\"country\":\"中国\",\"province\":\"上海\",\"city\":\"浦东新");
        sb.AppendLine("区\",\"verifyInfo\":\"readygo?\",\"bindUserName\":\"\"}</script>");
        sb.AppendLine("");
        sb.AppendLine(" <script type=\"text/javascript\">");
        sb.AppendLine("window.WXM && (function(WXM,win){");
        sb.AppendLine("");
        sb.AppendLine("  DATA.title = \"用户管理\";");
        sb.AppendLine("  DATA.groupList = [");
        sb.AppendLine("                      {");
        sb.AppendLine("        id: '0',");
        sb.AppendLine("        name: defaultGroupName[0] || \"默认组\",");
        sb.AppendLine("        num : '0'*1");
        sb.AppendLine("      },{");
        sb.AppendLine("        id: '100',");
        sb.AppendLine("        name: defaultGroupName[100] || \"F\",");
        sb.AppendLine("        num : '2'*1");
        sb.AppendLine("      }             ");
        sb.AppendLine("  ];");
        sb.AppendLine("  ");
        sb.AppendLine("})(WXM,window);");
        sb.AppendLine("</script>");
        sb.AppendLine("");
        sb.AppendLine(" <script type=\"text/javascript\">");
        sb.AppendLine("WXM.DATA.userinfo = {};");
        sb.AppendLine("WXM.DATA = {");
        sb.AppendLine("ROOT : WXM.ROOT,");
        sb.AppendLine("");
        sb.AppendLine("userinfo : {");
        sb.AppendLine("NickName : \"yoyo\",");
        sb.AppendLine("link : '/cgi-bin/indexpage?t=wxm-index&lang=zh_CN'");
        sb.AppendLine("}");
        sb.AppendLine("]");
        sb.AppendLine("};</script> ");
        return sb.ToString();
       
    }

}

正则的那些事,备忘...的更多相关文章

  1. canvas中普通动效与粒子动效的实现代码示例

    canvas用于在网页上绘制图像、动画,可以将其理解为画布,在这个画布上构建想要的效果。本文详细的介绍了粒子特效,和普通动效进行对比,非常具有实用价值,需要的朋友可以参考下

  2. H5混合开发app如何升级的方法

    本篇文章主要介绍了H5混合开发app如何升级的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. canvas学习和滤镜实现代码

    这篇文章主要介绍了canvas学习和滤镜实现代码,利用 canvas,前端人员可以很轻松地、进行图像处理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  4. localStorage的过期时间设置的方法详解

    这篇文章主要介绍了localStorage的过期时间设置的方法详解的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  5. 详解HTML5 data-* 自定义属性

    这篇文章主要介绍了详解HTML5 data-* 自定义属性的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  6. HTML5的postMessage的使用手册

    HTML5提出了一个新的用来跨域传值的方法,即postMessage,这篇文章主要介绍了HTML5的postMessage的使用手册的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. 教你使用Canvas处理图片的方法

    本篇文章主要介绍了教你使用Canvas处理图片的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  8. ios – Swift语言:如何调用SecRandomCopyBytes

    从Objective-C,我可以这样做:在Swift中尝试这个时,我有以下内容:但我得到这个编译器错误:data.mutableBytes参数被拒绝,因为类型不匹配,但我无法弄清楚如何强制参数.解决方法这似乎有效:

  9. 使用Firebase iOS Swift将特定设备的通知推送到特定设备

    我非常感谢PushNotifications的帮助.我的应用聊天,用户可以直接向对方发送短信.但是如果没有PushNotifications,它就没有多大意义.它全部设置在Firebase上.如何将推送通知从特定设备发送到特定设备?

  10. ios – NSData to Data swift 3

    如何将此代码转换为使用Swift3数据?

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部