第一次在简书记笔记,就当做自己的学习笔记
最近在学习perl语言正则表达式章,几个感觉大彻大悟的问题在这里记录下省得自己忘记了
1、前瞻(?=pattern ?!pattern)和后顾(?<=pattern ?<!pattern)
之前一直觉得前瞻和后顾很抽象,如何前瞻,如何后顾?
(一)举个前瞻栗子(骆驼书上的栗子):$string=”Paris in the the the spring”删除字符串内的重复字符
s/\b (\w+) \s (?=\1 \b)//gxi;
解析该正则表达式:1、\b匹配单词边界移动到the前沿;
2、(\w+)匹配单词字符直到遇到空格,在这就匹配第一个the;
3、\s匹配第一个the后的空格,关键来了(严肃脸)?=前瞻操作符不听话偷偷瞄一眼我们匹配到的\s(the后的空格)后是什么玩意儿,结果看到了一个the,好发现它和第一个捕获组(\w+)捕获的一样,匹配成功。
4、把pattern中匹配到的字符替换成空字符。
负前瞻的栗子自己想很简单
(二)举个后顾的栗子:$string=”love u baby”我只想匹配u前面是love的情况怎么写正则表达式?
/(?<=love) \s u .*/ 正则表达式匹配到空格后回头看一眼是不是love,是的话继续匹配下去,不是的话向前移动。
2017年2月15日