固化分组
摘要:1、考虑下面的需求,使用[a-zA-Z]+: 去匹配文本,对于文本Subject,分析匹配过程。2、[a-zA-Z]+匹配优先,一直吃到t,发现冒号不能匹配,于是使用备用状态,吐出一个字符, 还是不能匹配,再吐出一个字符......一直继续下去。3、这里存在问题,引擎试图吐出一个字符匹配冒...
阅读全文
posted @
2015-09-05 18:55
Andy Niu
阅读(714)
推荐(0) 编辑
占有优先量词
摘要:1、占有优先和固化分组一样,解决同样的问题,吃下去,丢弃备用状态,以后不会吐出来。2、占有优先的语法如下: ([a-zA-Z]++):
阅读全文
posted @
2015-09-05 18:54
Andy Niu
阅读(592)
推荐(0) 编辑
删除相邻重复的行
摘要:notepad++ 删除相邻重复的行查找 (.+?)(\r\n)\1 替换为 \1sed 删除重复行sed -nr '1h;1!H;${x;s/(.+)(\n)\1/\1/g;p}' num.txt-n 安静模式,sed 读取下一行之前,都会把模式空间的内容,打印到标准输出,-n取消这种打印。-r ...
阅读全文
posted @
2015-04-12 19:21
Andy Niu
阅读(1351)
推荐(0) 编辑
删除相邻重复的内容
摘要:1、思路:用正则表达式匹配,使用反向引用,替换。查找(.+?)\1 替换为 $1 (.+)\1 为什么不好?因为量词优先,+会尽可能地吃,然后又要一个一个吐出来,效率太差,使用(.+?)\1 取消量词优先,尽量少吃。 (.*?)\1 为什么不好,因为.* 可以匹配没有字符的情况,.+ 要求至少有一个...
阅读全文
posted @
2015-04-12 19:20
Andy Niu
阅读(367)
推荐(0) 编辑
正则表达式 环视
摘要:1、环视就是看周围的意思。环视匹配一个位置,这个位置的周围满足一些条件。也就是这个位置的前后,包含某些内容,后者不包含某些内容。2、对于12345678,修改为 12,345,678。这个需求要做的事情就是在数字中的一些位置添加逗号,这个位置的特点是:从最右边的一个数字开始,三个数字倍数的位置添加一...
阅读全文
posted @
2015-04-12 17:59
Andy Niu
阅读(420)
推荐(0) 编辑
正则表达式 平衡法则
摘要:1、只匹配期望的文本,排除不期望的文本。2、易于控制和理解。3、使用NFA,注意效率问题。能够匹配,尽快匹配并返回。不能匹配,尽快报告匹配失败。
阅读全文
posted @
2015-04-12 17:39
Andy Niu
阅读(321)
推荐(0) 编辑
高效正则表达式 匹配优先与忽略优先?
摘要:考虑 ^.*: 与^.*?: 的区别:1、前者从行头匹配到最后一个: 后者从行头匹配到第一个:2、注意:假设一行中有多个冒号,前者只能匹配一个,后者可以匹配多个。如果确定一行中最多只有一个冒号,使用二者是等价的。这里存在效率问题。3、如果冒号靠近行的开头,使用后者,少吃就能匹配成功,如果使用前者,情...
阅读全文
posted @
2015-04-12 17:34
Andy Niu
阅读(1134)
推荐(0) 编辑
匹配优先存在的问题,以及解决办法
摘要:1、匹配优先存在的问题,考虑下面的情况: The name "dumpling" is said "jiaozi" in Chenese. 我们想要匹配 双引号引起来的单词,这里也就是 dumpling和jiaozi。 使用 ".*" ,出现什么问题? "匹配第一个双引号,.* 量词优先匹配,一直...
阅读全文
posted @
2015-04-12 17:20
Andy Niu
阅读(397)
推荐(0) 编辑
回溯
摘要:1、NFA引擎最重要的性质是:遇到两个匹配成功的情况,选择其中的一个,同时记住另一个,作为备选状态。2、需要做出选择的情况有:量词和多选结构。量词是匹配优先的,而多选结构往往是按顺序选择的。3、选择一条支路,全局匹配成功,匹配结束。如果失败,后退一步,选择另一条支路,后退只是后退一步,符合后进先出。...
阅读全文
posted @
2015-04-12 16:39
Andy Niu
阅读(183)
推荐(0) 编辑
量词 匹配优先与忽略优先
摘要:正则表达式,量词是匹配优先的,也就是说,量词会尽量地吃,直到由于吃得太多,导致后面没法匹配,才吐出来一个。举例来说,文本ab1cd2,正则表达式 .*[0-9]匹配过程:*一直吃到2,发现坏了,数字没法匹配了,于是突出2,匹配成功,结束。也就是说.*匹配了ab1cd如果我想让.*[0-9]匹配ab1...
阅读全文
posted @
2015-04-04 11:09
Andy Niu
阅读(1128)
推荐(0) 编辑
正则表达式 元字符
摘要:1、正则表达式不包含元字符,就是纯文本检索2、行的开头与结尾 ^(脱字符)$(美元符),注意:^和$不是匹配具体的文本,而是匹配一个位置3、字符集合,如gr[ae]y, 首先匹配g, 下一个是r, 下一个是a或者e,最后一个是y, 这里的a和e表示一个字符集合,匹配其中的任意一个。如果想匹配小写字母...
阅读全文
posted @
2015-03-21 21:10
Andy Niu
阅读(1455)
推荐(0) 编辑
NFA与DFA
摘要:正则表达式匹配,包含两个东西,一个是表达式,一个文本。NFA(Nondeterministic Finite Automaton),不确定有穷自动机,表达式主导,NFA去吃文本,贪婪算法吃下去,如果因为前面吃得太多,导致后面没的吃(后面匹配失败),前面吃的要吐出一点,后面还匹配不成功,前面再吐出一点...
阅读全文
posted @
2013-11-21 19:36
Andy Niu
阅读(501)
推荐(0) 编辑