zoukankan      html  css  js  c++  java
  • 正则表达式并没你想的那么难(二)

    前言

    9号的时候楼主发了一片博文讲了正则表达式的基础《正则表达式并没你想的那么难(一)》http://www.cnblogs.com/jlimy/p/3465555.html。今天给大家讲一讲正则表达式的分组。

    分组

    首先是分组的概念,其实分组很简单。分组的作用就是选取你想要的分组进行操作,比如替换掉东西,或者提取出来输出之类的。

    1,简单的分组

    (a1)(a2)(a3)(a4),你看。这里是一个最简单的正则表达式,就是匹配”a1a2a3a4“的,那什么是分组呢。正则表达式中,分组是按括号区分的,一对括号就是一个分组。

    比如说上面的表达式中,a1就是第一组,a2就是第二组,a3就是第三组,a4就是第四组。嘿嘿,简单吧。

    举个例子。http://www.baidu.com,这是百度的url,写一个匹配url规则的表达式为([a-zA-Z]+)://([w.?]+)

    先来解析一下这个表达式。

    首先,我们前面说了,写正则表达式最好分部分写。那么这里面就可以分为两个部分,1.http,2.后面的具体地址。前面的头部自然就是([a-zA-Z]+)就是说大小写英文都匹配。

    这部分对应的就是http,这就是第一组,因为包了个括号。而后面的([w.?]+)对应www.baidu.com。也就是第二组。我相信只要你的数学达到小学三年级的标准都是能理解的。

    最简单的说,就是数括号对嘛。

    2,稍微复杂点的。

    ((a1)(a2))((a3)(a4)),这个有的朋友看着就有疑问了。这个该肿么办。

    那么这个可以这样理解,首先第一对括号是什么?((a1)(a2)),这整个是第一对括号,这个没有意见吧。那么第二对括号是(a1)还是((a3)(a4))?这里有个巧妙的方法,就是数左括号。你猜到了吗?

    这里的左括号是a1前面的”(“,然后再找这个括号对应的右括号,就是a1后面的那个。所以这里的第二组就是(a1)。后面的大家自己去数一数,举一反三的能力作为牛逼的程序员必须要有。

    应用

    这里先不讲C#中的实现。因为我看了一下内容还是有点多而且C#中的Regex类整个讲起来会偏离这篇中讲分组的主题。所以实现会放到以后讲。

    分组中应用其实还蛮多的。

    我讲2个我认为会用到的地方,莫怪在下才疏学浅,因为想例子真的很费劲,键盘的逗号键又不怎么灵,所以很抱歉这里只列举两个。

    1,先我遇到的地方,url重写。http://www.xxxx.com/detail-45613.aspx,不知道你们是否看见过这样的url,其实他的本来面目是http://www.xxxx.com/detail.aspx?id=45613,首先写一个正则表达式匹配这个url,http://www.xxxx.com/detail-(d+)+.aspx,将这里匹配到的(d+)提取。比如r1代表第一组的内容,重写为http://www.xxxx.com/detail.aspx?id=r1就能完成重写。

    2,比如有一数组,结构为name:jilimy;age:22,sex:man;将其中jilimy,24,man提取出来分别作为r1,r2,r2即第一组第二组第三组中的内容,改写为“姓名:r1;年龄:r2;性别:r3;"就变成了 “姓名:jilimy;年龄:24;性别:man;"这是很好用的地方。

    其他的不在赘述,相信大家懂了之后都能自己找到很多的应用的地方。

    尾声

    前面两篇先暂时讲这些理论性的东西。想自己去敲代码实现的同学可以去看看Regex类的属性和方法或者关注下我,我会在后面的博文中写到关于C#中的实现。

    写这篇也花了1个小时的时间,主要这个逗号键不灵让我有点蛋蛋的忧伤。觉得对您有帮助的话或者愿意奉献爱心的园友点个推荐吧,谢啦~!

  • 相关阅读:
    leetcode562- Longest Line of Consecutive One in Matrix- medium
    leetcode118- Pascal's Triangle I & II- easy
    leetcode524- Longest Word in Dictionary through Deleting- medium
    leetcode128- Longest Consecutive Sequence- hard
    leetcode22- Generate Parentheses- medium
    leetcode17- Letter Combinations of a Phone Number- medium
    leetcode678- Valid Parenthesis String- medium
    php截取字符串的实例代码(支持utf-8)
    php中封装的curl函数(抓取数据)
    linux计划任务运行php文件的方法分享
  • 原文地址:https://www.cnblogs.com/jlimy/p/3475549.html
Copyright © 2011-2022 走看看