博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正则表达式的实现原理(一)
阅读量:6173 次
发布时间:2019-06-21

本文共 1168 字,大约阅读时间需要 3 分钟。

hot3.png

正则表达式大家已经非常熟悉,这里不是教大家怎么用,而是说明如何用代码实现正则表达式。该篇先理清正则表达式的组成结构:

1、正则表达式描述的是一个字符串的匹配模式,本质上是一个字符串的集合,如果给定的字符串属于该集合就说明该字符串与模式相匹配;(比如在中提到的判断某个长文本是否包含指定关键字的场景就是分析长文本的子串是否包含在模式描述的集合中,本质上是模式匹配问题,更确切的讲应该是单模式匹配,因为以后还要提到多模式匹配问题。这同样也解释了为什么把简单的字符串查找问题说成一个高大上的模式匹配问题的原因(至少我个人以前是这么认为的))

2、再次强调以集合的观点来看待正则表达式,以上提到了集合,那么“979e5fbbc0f6c312a834cd947a4f60c285e.jpg(空)”是属于任何集合的,也就是说空本身就是一个正则表达式;

3、先认识简单的正则表达式。任何单个字符都可用正则表达式表示,表示的方式多种多样:

   (1)简单的字符常量如:字母、数字、标点符号以及一些空白符(常见的如\t\n\r,不常见的自己查吧)

   (2)字符常量表示的正则表达式是单一的因为集合中只有自身,因此有很多灵活的表示方法如:

           \d、[0-9]表示0-9的数字,[]可以用来表示更个性化的情况如[135]表示只能是1、3、5这3个数字中的一个;

           \D、[^0-9]、[^\d]表示非数字字符;

           \w、[_0-9a-zA-Z]表示所有的大小写字母、数字与下划线;

           \W、[^\w]、[^_0-9a-zA-Z]表示除大小写字母、数字与下划线的其它字符;

            \s、[ \t\n\r]表示空白字符;

            \S、[^\s]、[^ \t\n\r]表示除 \t\n\r空白符的其它字符;

            .可以表示除\n外的任何字符

    (3)连接运算符是一个隐藏的运算符,将两个正则表达式按照顺序并列写出即可,表示的是两个集合的笛卡尔积,比如:ab、a\d、\d\s等等,注意只要是合法的正则表达式就可以连接,这实际上是一个递归的思想,在后面的某些运算中一样适用;

    (4)或运算(|)表示两个正则表达式所组成集合的并集,如:a|b、\s|\S、a|ab,需注意或运算的优先级小于连接;

    (5)括号()运算用于改变优先级如:(a|b)c表示集合{ac,bc},很明显括号有最高的运算优先级;

    (6)次数运算符,用于描述正则表达式重复出现的次数,如:a?,a+,a*分别表示a可出现0次或1次,a至少出现1次,a可出现0次或多次。也可精确指出匹配的次数:a{4}表示a只能出现4次,a{4,7}表示可出现4-7次,a{4,}表示至少出现4次;次数运算符的优先级高于连接运算;

    (7)边界匹配符,如^匹配行的开头,$匹配行的结尾,\b匹配单词与空格的边界,\B与\b相反;

      

转载于:https://my.oschina.net/u/1268334/blog/3030226

你可能感兴趣的文章
Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果!...
查看>>
phalapi-进阶篇2(DI依赖注入和单例模式)
查看>>
MySQL 5.7.5 : GTID_EXECUTED系统表
查看>>
Hybrid框架UI重构之路:四、分而治之
查看>>
【原创】Valgrind 基础
查看>>
Es6系列之destructuring assignments
查看>>
CSS ID选择器与CLASS选择器
查看>>
mysql 索引B-Tree类型对索引使用的生效和失效情况详解
查看>>
指针的看法
查看>>
Cocos-2d 坐标系及其坐标转换
查看>>
LAMP网站的CACHE机制概要
查看>>
[MySQL 5.6] 5.6新参数slave_rows_search_algorithms
查看>>
ESXi5.1嵌套KVM虚拟化环境支持配置
查看>>
爬虫的小技巧之–如何寻找爬虫入口
查看>>
JVM学习(二)垃圾收集器
查看>>
为hexo博客添加基于gitment评论功能
查看>>
java 库存 进销存 商户 多用户管理系统 SSM springmvc 项目源码
查看>>
Flutter - Drawer 抽屉视图与自定义header
查看>>
ERP系统的优势_库存管理软件开发
查看>>
如何内行地评价公链(一)从真正的不可能三角谈起
查看>>