让正则表达式从指定位置开始查找?

时间:2021-07-29 10:56:32
让正则表达式从指定位置开始查找?这里的指定位置就像一行的第十个字符处?怎么搞?小弟刚开始业余学正则,表示疑惑很多……
比如一行字符串: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);

#2


哥,正则呀~我要写到vimrc里面的

#3


[.\n]{80}      匹配任意字符包括'\n'80次

#4


然后呢?我要命中后面的东西,不包含前面的80个

#5


把你的意思说的更清楚一点 是想找出所有字符数多于80个字符的行? 我没太明白你的意思

#6


(?<=.{80}).*$ 这样试一下 不知道是不是你想要的意思

#7


(.{80})(你的正则在这里)

#8


其实,vim和perl对正则的表示略有不同。我上面问题的答案是:\(^.\{80}\)\@<=.*$。先命中一行的前80个字符,不保留,然后命中后面直到行尾的所有字符,验证通过。

#9


引用 6 楼 gongheguoyingpai11 的回复:
(?<=.{80}).*$ 这样试一下 不知道是不是你想要的意思


这中表示方式vim中无效的,我最开始就这样写的,没反应,查了很多资料,在一个很偏僻的角落里找到了。
等效于"\(.\{80}\)\@<=.*$",但是如要要求是从行首开始计算的话,还要加个字符吧。
\(^.\{80}\)\@<=.*$

#10


不知道这个神奇的细节会不会有人感兴趣……

#11


你可以看一下 正则指引  或者 精通正则表达式  尤其是精通正则表达式 里面对于各种版本的正则都会有一些涉猎 所以一些比较偏僻的东西可能会在里面有介绍

#12


其实我给的相当于一个伪代码,表达出了基本的意思

不同的re,有不同的flavor,无外乎就是哪些是元字符,元字符如何转义,如何定义首尾,如何定义量词,如何定义捕获组,如何丢弃捕获的结果⋯⋯

\(^.\{80}\)\@<=.*$
对于这个re,大胆猜测:
\(\)定义了捕获组,^表示开始,.表示任一字符,{80}是量词,\(^.\{80}\)就捕获了前80个字符

.*$就是表示到结尾的所有字符了

<=猜是vim特有的东西?表示把捕获的东西(.*$)存入\@中,\@大概是寄存器吧

#13


另外推荐《精通正则表达式》一书,介绍了re的各种概念,不同实现的各种flavor,re的实现原理,等等。

LZ记得结贴。

#14


正则表达式速查 正则表达式举例 正则表达式学习 (4页A4纸) http://download.csdn.net/detail/zhao4zhong1/1808549

#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);

#2


哥,正则呀~我要写到vimrc里面的

#3


[.\n]{80}      匹配任意字符包括'\n'80次

#4


然后呢?我要命中后面的东西,不包含前面的80个

#5


把你的意思说的更清楚一点 是想找出所有字符数多于80个字符的行? 我没太明白你的意思

#6


(?<=.{80}).*$ 这样试一下 不知道是不是你想要的意思

#7


(.{80})(你的正则在这里)

#8


其实,vim和perl对正则的表示略有不同。我上面问题的答案是:\(^.\{80}\)\@<=.*$。先命中一行的前80个字符,不保留,然后命中后面直到行尾的所有字符,验证通过。

#9


引用 6 楼 gongheguoyingpai11 的回复:
(?<=.{80}).*$ 这样试一下 不知道是不是你想要的意思


这中表示方式vim中无效的,我最开始就这样写的,没反应,查了很多资料,在一个很偏僻的角落里找到了。
等效于"\(.\{80}\)\@<=.*$",但是如要要求是从行首开始计算的话,还要加个字符吧。
\(^.\{80}\)\@<=.*$

#10


不知道这个神奇的细节会不会有人感兴趣……

#11


你可以看一下 正则指引  或者 精通正则表达式  尤其是精通正则表达式 里面对于各种版本的正则都会有一些涉猎 所以一些比较偏僻的东西可能会在里面有介绍

#12


其实我给的相当于一个伪代码,表达出了基本的意思

不同的re,有不同的flavor,无外乎就是哪些是元字符,元字符如何转义,如何定义首尾,如何定义量词,如何定义捕获组,如何丢弃捕获的结果⋯⋯

\(^.\{80}\)\@<=.*$
对于这个re,大胆猜测:
\(\)定义了捕获组,^表示开始,.表示任一字符,{80}是量词,\(^.\{80}\)就捕获了前80个字符

.*$就是表示到结尾的所有字符了

<=猜是vim特有的东西?表示把捕获的东西(.*$)存入\@中,\@大概是寄存器吧

#13


另外推荐《精通正则表达式》一书,介绍了re的各种概念,不同实现的各种flavor,re的实现原理,等等。

LZ记得结贴。

#14


正则表达式速查 正则表达式举例 正则表达式学习 (4页A4纸) http://download.csdn.net/detail/zhao4zhong1/1808549