比如一行字符串:mmlog
为什么我的 "(?<=mm).*$" 查到的结果不是"log", 不是mm后面直到行尾的任意字符?
我现在最直接的想法是让一行超过80个的任意字符全部命中,不包含前面的80个,怎么搞??
14 个解决方案
#1
char s[1000];
int i;
for (i=0;i<100;i++) sprintf(s+i*2,"%2d",i);
printf("%s\n",s);
printf("%s\n",s+80);
int i;
for (i=0;i<100;i++) sprintf(s+i*2,"%2d",i);
printf("%s\n",s);
printf("%s\n",s+80);
#2
哥,正则呀~我要写到vimrc里面的
#3
[.\n]{80} 匹配任意字符包括'\n'80次
#4
然后呢?我要命中后面的东西,不包含前面的80个
#5
把你的意思说的更清楚一点 是想找出所有字符数多于80个字符的行? 我没太明白你的意思
#6
(?<=.{80}).*$ 这样试一下 不知道是不是你想要的意思
#7
(.{80})(你的正则在这里)
#8
其实,vim和perl对正则的表示略有不同。我上面问题的答案是:\(^.\{80}\)\@<=.*$。先命中一行的前80个字符,不保留,然后命中后面直到行尾的所有字符,验证通过。
#9
这中表示方式vim中无效的,我最开始就这样写的,没反应,查了很多资料,在一个很偏僻的角落里找到了。
等效于"\(.\{80}\)\@<=.*$",但是如要要求是从行首开始计算的话,还要加个字符吧。
\(^.\{80}\)\@<=.*$
#10
不知道这个神奇的细节会不会有人感兴趣……
#11
你可以看一下 正则指引 或者 精通正则表达式 尤其是精通正则表达式 里面对于各种版本的正则都会有一些涉猎 所以一些比较偏僻的东西可能会在里面有介绍
#12
其实我给的相当于一个伪代码,表达出了基本的意思
不同的re,有不同的flavor,无外乎就是哪些是元字符,元字符如何转义,如何定义首尾,如何定义量词,如何定义捕获组,如何丢弃捕获的结果⋯⋯
\(^.\{80}\)\@<=.*$
对于这个re,大胆猜测:
\(\)定义了捕获组,^表示开始,.表示任一字符,{80}是量词,\(^.\{80}\)就捕获了前80个字符
.*$就是表示到结尾的所有字符了
<=猜是vim特有的东西?表示把捕获的东西(.*$)存入\@中,\@大概是寄存器吧
不同的re,有不同的flavor,无外乎就是哪些是元字符,元字符如何转义,如何定义首尾,如何定义量词,如何定义捕获组,如何丢弃捕获的结果⋯⋯
\(^.\{80}\)\@<=.*$
对于这个re,大胆猜测:
\(\)定义了捕获组,^表示开始,.表示任一字符,{80}是量词,\(^.\{80}\)就捕获了前80个字符
.*$就是表示到结尾的所有字符了
<=猜是vim特有的东西?表示把捕获的东西(.*$)存入\@中,\@大概是寄存器吧
#13
另外推荐《精通正则表达式》一书,介绍了re的各种概念,不同实现的各种flavor,re的实现原理,等等。
LZ记得结贴。
LZ记得结贴。
#1
char s[1000];
int i;
for (i=0;i<100;i++) sprintf(s+i*2,"%2d",i);
printf("%s\n",s);
printf("%s\n",s+80);
int i;
for (i=0;i<100;i++) sprintf(s+i*2,"%2d",i);
printf("%s\n",s);
printf("%s\n",s+80);
#2
哥,正则呀~我要写到vimrc里面的
#3
[.\n]{80} 匹配任意字符包括'\n'80次
#4
然后呢?我要命中后面的东西,不包含前面的80个
#5
把你的意思说的更清楚一点 是想找出所有字符数多于80个字符的行? 我没太明白你的意思
#6
(?<=.{80}).*$ 这样试一下 不知道是不是你想要的意思
#7
(.{80})(你的正则在这里)
#8
其实,vim和perl对正则的表示略有不同。我上面问题的答案是:\(^.\{80}\)\@<=.*$。先命中一行的前80个字符,不保留,然后命中后面直到行尾的所有字符,验证通过。
#9
这中表示方式vim中无效的,我最开始就这样写的,没反应,查了很多资料,在一个很偏僻的角落里找到了。
等效于"\(.\{80}\)\@<=.*$",但是如要要求是从行首开始计算的话,还要加个字符吧。
\(^.\{80}\)\@<=.*$
#10
不知道这个神奇的细节会不会有人感兴趣……
#11
你可以看一下 正则指引 或者 精通正则表达式 尤其是精通正则表达式 里面对于各种版本的正则都会有一些涉猎 所以一些比较偏僻的东西可能会在里面有介绍
#12
其实我给的相当于一个伪代码,表达出了基本的意思
不同的re,有不同的flavor,无外乎就是哪些是元字符,元字符如何转义,如何定义首尾,如何定义量词,如何定义捕获组,如何丢弃捕获的结果⋯⋯
\(^.\{80}\)\@<=.*$
对于这个re,大胆猜测:
\(\)定义了捕获组,^表示开始,.表示任一字符,{80}是量词,\(^.\{80}\)就捕获了前80个字符
.*$就是表示到结尾的所有字符了
<=猜是vim特有的东西?表示把捕获的东西(.*$)存入\@中,\@大概是寄存器吧
不同的re,有不同的flavor,无外乎就是哪些是元字符,元字符如何转义,如何定义首尾,如何定义量词,如何定义捕获组,如何丢弃捕获的结果⋯⋯
\(^.\{80}\)\@<=.*$
对于这个re,大胆猜测:
\(\)定义了捕获组,^表示开始,.表示任一字符,{80}是量词,\(^.\{80}\)就捕获了前80个字符
.*$就是表示到结尾的所有字符了
<=猜是vim特有的东西?表示把捕获的东西(.*$)存入\@中,\@大概是寄存器吧
#13
另外推荐《精通正则表达式》一书,介绍了re的各种概念,不同实现的各种flavor,re的实现原理,等等。
LZ记得结贴。
LZ记得结贴。
#14
正则表达式速查 正则表达式举例 正则表达式学习 (4页A4纸)
http://download.csdn.net/detail/zhao4zhong1/1808549