读书人

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

发布时间: 2014-01-12 00:03:16 作者: rapoo

让正则表达式从指定位置开始查找?
让正则表达式从指定位置开始查找?这里的指定位置就像一行的第十个字符处?怎么搞?小弟刚开始业余学正则,表示疑惑很多……
比如一行字符串:mmlog
为什么我的 "(?<=mm).*$" 查到的结果不是"log", 不是mm后面直到行尾的任意字符?

我现在最直接的想法是让一行超过80个的任意字符全部命中,不包含前面的80个,怎么搞??


[解决办法]
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);
[解决办法]
[.\n]{80} 匹配任意字符包括'\n'80次
[解决办法]
把你的意思说的更清楚一点 是想找出所有字符数多于80个字符的行? 我没太明白你的意思
[解决办法]
(?<=.{80}).*$ 这样试一下 不知道是不是你想要的意思
[解决办法]
(.{80})(你的正则在这里)

[解决办法]
你可以看一下 正则指引 或者 精通正则表达式 尤其是精通正则表达式 里面对于各种版本的正则都会有一些涉猎 所以一些比较偏僻的东西可能会在里面有介绍
[解决办法]
其实我给的相当于一个伪代码,表达出了基本的意思

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

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

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

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

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

LZ记得结贴。

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

读书人网 >C语言

热点推荐