![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
正则表达式
文章平均质量分 62
「已注销」
这个作者很懒,什么都没留下…
展开
-
精通正则表达式:开篇
第一次接触正则表达式是在大二上学期学Java的时候,初次学习感觉这个东西很有意思,功能很强大,后来才发现,自己接触到的只是正则表达式的皮毛而已。在一次随手练习一个小程序时,它的强大再次震撼到了我,那是一个关于拉丁猪文字游戏的例子,基本规则是将一个英语单词的第一个辅音音素的字母移动到词尾并且加上后缀-ay(譬如“banana”会变成“anana-bay”):除了a、e、i、o、u,其余都是辅音,如果不原创 2017-06-29 11:05:47 · 617 阅读 · 0 评论 -
精通正则表达式八:多选结构是匹配优先还是忽略优先
记得在前面测试引擎的类型的时候用正则表达式‘nfa|nfa not’来匹配文本‘nfa not’,因为DFA和POSIX NFA不支持忽略优先量词,所以如果匹配到的是‘nfa’,则是NFA: 对于NFA而言,会逐个按顺序尝试多选结构的分支,哪个先匹配到返回的就是哪个: 对于DFA而言,却总是返回匹配长度最长的文本: test.txt中的文本是‘nfa not’,其实这也跟它的文本主原创 2017-09-19 17:24:38 · 1567 阅读 · 0 评论 -
精通正则表达式七:占有优先量词和固化分组
定义占有优先量词:?+ *+ ++ {m,n}+占有优先量词与匹配优先量词很相似,只是它们从来不会交还已经匹配的字符。 固化分组:(?>...) ...是指具体内容固化分组的内容与正常的匹配并无区别,只是当匹配完括号中的内容后,括号中的备用状态会全部舍去。例子将所有的小数保留三位,规则如下:如果小数位数第三位不为0保留三位,如果小数位数少于三位或第三位为0,保留两位小数。 首先可以用原创 2017-09-18 17:23:05 · 2359 阅读 · 0 评论 -
精通正则表达式六:匹配优先与忽略优先
定义匹配优先:尽可能多的匹配 忽略优先:尽可能少的匹配 我们刚开始接触的都是匹配优先:* + ?{num,num}忽略优先只需要在原本的匹配优先量词后加一个问号即可:*? +? ?? {num,num}?要注意的是,DFA不支持忽略优先。实例来看下面两个例子: 匹配优先: 忽略优先: 原因是什么呢?上面说过,匹配优先总是尽可能多的匹配,所以‘\w+’先匹配所有的文本,然后为了匹配‘原创 2017-09-12 10:38:13 · 5133 阅读 · 3 评论 -
匹配优先可能遇到的问题
简单的问题其实在精通正则表达式六:匹配优先与忽略优先中已经看到了匹配优先的问题,比如我想匹配一段文本中引号中的内容,用匹配优先就会出现问题: 原本希望匹配的是”Welcome”和”hosted”,然而却得到了错误的结果,上篇文章已经写过,这里就不多加赘述。现在来说说如何解决这个问题,首先可以用忽略优先量词: 还可以用排除型字符组: 用排除法时注意,‘^’只要用在‘[]’的里面才是排除,原创 2017-09-13 15:52:12 · 724 阅读 · 0 评论 -
精通正则表达式二:Perl中正则表达式的基本应用
本书的第二章主要讲的是在Perl语言中运用正则表达式,虽然以前没有接触过Perl语言,但作者的前提就是假设读者不会Perl语言,所以对于有一定编程基础的人来说读起来没有太大困难,关于Perl语言的简单入门,除了书上讲的,可以参考这篇:http://blog.csdn.net/zhangjikuan/article/details/52199059,本篇文章主要写一些与正则表达式有关的部分。1.匹配m原创 2017-07-03 16:45:49 · 3143 阅读 · 0 评论 -
精通正则表达式一:元字符
在正则表达式中,有一些特殊的字符,例如‘* ?’等,他们有特殊的意义,‘*’代表出现0至多次,‘?’代表1次或0次,称他们为元字符。行起始和结束字符^ 匹配行的起始$ 匹配行的结束例如,在http://regexr.com/中: 这里只匹配了倒数两行中的http,但倒数第三行中的http并没有匹配到,这就是元字符“^”起到的作用,注意:确保你在匹配的时候点选了flags中的multi原创 2017-06-30 16:10:32 · 524 阅读 · 0 评论 -
精通正则表达式四:环视功能
环视功能的介绍环视有下面四种类型(?=...) 肯定顺序环视,子表达式能匹配右侧的文本(?!...) 否定顺序环视,子表达式不能匹配右侧的文本(?<=...) 肯定逆序环视,子表达式能匹配左侧的文本(?<!...) 否定逆序环视,子表达式不能匹配左侧的文本同样,先举例子: 这是一个肯定顺序环视,如果a的右侧是数字,那么就能匹配到a。再来看一下否定顺序环视,其实根据上面就很好理原创 2017-07-04 15:43:44 · 3477 阅读 · 1 评论 -
精通正则表达式三:非捕获型括号
在精通正则表达式一中讲到了反向引用,其中的括号就是捕获型括号,它具有分组和捕获的作用,但是,有时候我们需要用到非捕获型括号,比如我已经写好了一个程序,现在我要扩展正则表达式的功能,比如加一个‘(…)?’,这样并没有影响原来的功能而且能匹配比原来跟多的东西,但是,它打乱了原来的组的反向引用顺序,如果恰好这个分组是你用不到的,那么就可以就可以用上非捕获型括号:(?: )因为它不用捕获,还能提高匹配效率,原创 2017-07-04 14:27:51 · 1266 阅读 · 0 评论 -
关于匹配行的结束符‘$’的一些思考
今天突然想到一个问题,我用‘′来匹配行的结束的时候,为什么不用先匹配换行符‘\n′?是‘’来匹配行的结束的时候,为什么不用先匹配换行符‘\n’? 是‘’中包括了换行符吗? 我做了如下实验: 这个肯定是没有任何问题的,然后加上换行符 这时候一个都没有匹配到,然后我换行 这时候又匹配到了第一个abc 然后我又在空行内写东西: 所以,是网站对文本设置的不同导致的吗?也到网上原创 2017-07-02 00:14:25 · 640 阅读 · 0 评论 -
精通正则表达式五:NFA与DFA
定义NFA与DFA是正则表达式引擎所使用的两种基本技术:NFA:非确定型有穷自动机DFA:确定型有穷自动机作者用用电动机来比喻DFA,用汽油机来比喻NFA,他们确实有许多相似之处: 1.汽油机的历史更长,NFA的历史也比DFA长 2.汽油机应用更加广泛,NFA的应用也比DFA更加广泛 3.汽油机可分为达到加利福尼亚州的尾气排放标准(更严格)和没有达到两种,NFA也分为POSIX NFA和传统原创 2017-09-11 20:47:34 · 3369 阅读 · 0 评论