学习理财博客空间

理财鱼

您现在的位置是:理财鱼 > 保险知识 >

保险知识

Zjmainstay学习笔记

发布时间:2021-07-26 18:11保险知识 评论

  正则对于新人来说是一个头疼的名字,让人闻而生畏。但是,在我看来,正则,并没有那么神秘,希望能通过这篇正则表达式入门教程解除正则新人对于正则的畏惧感。

  接触正则应该有三年不止了吧,我也不知道自己怎么就走过了畏惧正则的时期,而且在一个小圈子里面还成了正则强人。

  今天就基于我对正则的理解,简单描述一下我眼里的正则,希望这篇正则表达式入门教程能够解除正则新人对于正则的畏惧感。

  关于正则字符,很多文章都会讲到,足足有一篇文章才能描述清楚,我这里就不多说,对于我,平时,常用的有:

  但是,如果[]里面加上^则会变成排除这个字符,如[^abc]就表示不是a、不是b、也不是c

  另外,在[]里面可以使用-表示一个范围,如[0-9]表示从0到9,类似的还有[a-zA-Z],如果要包含-字符,可以给它加上转义[\-]。

  关于[]常见的错误用法是:[abbc]用来表示ab或bc,实际上,它得到的结果是[abc],即a或b或c或这4个字符(单字符)的任意一个。这里可以改成(abbc)。

  总结:[]里面的特殊符有五个:[]-\^,其他字符都是普通字符,包括*.?等。

  这里的^跟[]里面用的^是同一个字符,但是却不是一个意思,这里它表示整个字符串的开始,比如^表示以www开头的字符串,注意区分,不在[]里面的是开始符,在里面的排除

  [0-9]{1,3}表示在0-9的范围里面循环1个、2个或者3个,可能结果有5、20、415等。

  如果刚好需要匹配字符{1},则正则需要给{进行转义,得到\{1}的正则。

  因为,当遇到第一个/div,非贪婪模式就不会再往后找了。

  前面提到[]里面的字符有选一个字符功能,但是假如不是一个字符,比如:httpftpsvn 就需要用分开,的作用域是一直往后直到遇到括号,比如,对于源字符串

  上面例子(httpftpsvn) abc就是数据分界的例子,然后,匹配结果会得到一个[1]的子集数据(数组下标1),这里就是子模式的概念,子模式也叫分组,利用子模式,可以得到想要取出来的数据。子模式1、2、3的计算方法为左括号的计数,从左到右,从1开始,比如:

  (httpftpsvn)://([^/]+),分组1得到的是(httpftpsvn)里面的数据,分组2得到([^/]+)里面的数据,对于嵌套括号也是点左括号即可。在正则中有很多与括号结合的写法,你在数左括号的时候,一定要注意,非捕获组和环视的左括号都是不需要数的。

  我们要匹配111这样的连续出现3此的数字,我们可以写出正则:(\d)\1\1,(\d)匹配到第一个1,后面再引用这个匹配内容,得到111。

  上面说到()作为子模式可以得到它里面的数据,但是,有些时候,()只是作为数据分界功能,并不需要取出来,这时候就要用到非捕获组的概念了。比如:(httpftpsvn)://([^/]+)只想得到域名,也就是[2],那么(httpftpsvn)就只是数据分界的功能,这里不需要捕获,因此使用非捕获组功能,(?:httpftpsvn)屏蔽这部分的数据获取,此时,(?:这个左括号排除[1]计数,也就是(?:httpftpsvn)://([^/]+)中的([^/]+)变成[1]了。

  这个/ /在PHP中称为分隔符,正则表达式需要由分隔符闭合包裹。在PHP中,分隔符可以使任意非字母数字、非反斜线、非空白字符。这个概念很关键,它能帮助我们简化一些正则的书写,避免错误,如:

  方案(1)是对正则内部的分隔符做转义,方案(2)是规避了本来的/分隔符,使用#作为分隔符,从而避免/需要转义。

  虽然很多情况下,都是看到前后一致的分隔符,但是,大家需要了解一下,[div.*?/div]这个表达式在PHP里也是合法的。(不提倡使用,仅了解!)

  模式修饰符在许多程序语言中都支持的,比如最常见的是i,不区分大小写,如javascript里的/[a-z0-9]/i,表示匹配字母数字,不区分大小写。

  模式修饰符s的作用主要是的.能够匹配换行,在处理换行数据时,通常会用到。

  在PHP中,模式修饰符有两种用法,一种是上面的,在分隔符后面的模式修饰符,它的作用范围是全局;另一种是在正则表达式中间的。

  示例地址:PHP正则表达式中间的模式修饰符(选择Version 1/2切换版本查看结果区别)

  关于常用字符的使用差不多到这里,还有更多的请参考正则表达式30分钟入门教程,这是我看过比较全面的正则入门资料。

  注:这里的锚点区分于正则原本关于锚点的定义,此处是确定的参照文本的意思,如a标签里的a

  每一个正则都是有针对性的,只有这样正则才有意义。因此,写正则之前,先观察你要解析的数据,找准唯一的锚点,比如,你要解析一个页面的title标签,得到title内容,那么这个title就是锚点。有时候,所要取的数据确实无法定位一个唯一的锚点,那么,你可以分解数据,先通过一个唯一锚点锁定你的数据块,取出来之后,再对这个数据块取数据即可。比如,有这么一段源字符串:

  你直接通过class=content来匹配数据的话很明显会得到两个,那么,你可以扩展它的数据域,先以id=module_1作为锚点,获取整个

  然后在对这个数据块的数据处理,得到class=contents的内容即可。

  注:为了更清晰查看,前面源码做了换行,匹配失败的朋友,可以修改.*?为[\s\S]*?修正正则。

  所谓去噪点,就是把无关的东西都当浮云,用通配符过掉它,只关心我们想要的数据,比如:

  关于取数据,上面一大篇下来大家应该有概念了,就是利用子模式来获取,这里不再赘述。

  关于正则表达式的高级教程,请阅读《深入正则表达式应用 - 正则表达式高级教程》

  附:正则测试工具RegexBuddy 4.1.0-正则测试工具.rar正则表达式工具RegexBuddy使用教程正则表达式工具RegexBuddy使用教程Mac 正则表达式工具Mac正则表达式测试工具

>相关《Zjmainstay学习笔记》内容:


1、 泓禧科技12月31日上会:主营笔记本电脑配件生产 惠普、联想等品牌供应商

挖贝网 12月26日,北京证券交易所上市委员会定于2021年12月31日上午9时召开2021年第4次审议会议。泓禧科技(871857)上会,参会委员为楚晋宏、时晋、黄亮、谢元勋、胡燕华。 挖贝研究院资料显示,泓禧科技主营业务为高精度电子线组件,新型、微型电声器件...【继续阅读】


2、 如何做好农业防寒减灾工作?请看这份技术指引,一起学习!

理财鱼小提示:如何做好农业防寒减灾工作?请看这份技术指引,一起学习! 如何做好农业防寒减灾工作? 请看这份技术指引 一起来学习 据市气象部门预计,25-28日受寒潮影响,我市有一次明显大风降温降水过程。其中26-27日有小到中雨,高海拔地区有冻雨,过程日平...【继续阅读】


3、 央媒曝光电商培训乱象:三天两三万元,连环套课延长学习周期

视频来源:@央视财经(05:40) 近年来,电商行业发展迅速,电商培训作为一种新的职业教育培训也日益兴起。数据显示,我国现存电商培训相关企业2858家。从区域分布来看,广东省以404家排名第一,甘肃省和浙江省分别以268家、236家排在二三位。虽然电商培训市...【继续阅读】