正则表达式 (?<=exp) 消耗字符吗?

2016-11-15 17:03:27 +08:00
 explist
http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
这个网址上说不消耗字符,但,实验了下,好像并不如此:

import re
a='set 2ddp'
b=re.search(r'(?=set).*',a)
print(b.group(0)) # 此处完整输出 a 这个是真正的不消耗字符
b=re.search(r'(?<=set).*',a)
print(b.group(0)) # 此处输出:' 2ddp'
2688 次点击
所在节点    Python
8 条回复
explist
2016-11-15 17:06:51 +08:00
JavaScript 好像不支持,无法可视化
philions
2016-11-15 17:26:55 +08:00
look around 匹配的是位置,(?<=set)正好匹配在 set 后的空格开始位置
fy
2016-11-15 17:28:43 +08:00
不消耗,所有特殊组都不消耗字符串。

拙作: https://github.com/fy0/tinyre
littleshy
2016-11-15 17:29:54 +08:00
(?=set) 是从 set 之前开始匹配;
(?<=set) 是从 set 后面开始匹配。
DiamondbacK
2016-11-15 17:34:55 +08:00
look around 属于零宽断言,不消耗字符。
JavaScript 只支持 look ahead ,不支持 look behind 。
explist
2016-11-15 17:41:14 +08:00
这样理解:
所说的之前之后,都有一个定点,即当前位置。在当前位置前后预查满足要求后,就在这个定点处开始真正的匹配
vugusurk
2016-11-15 18:05:55 +08:00
这是 lookbehind ,基于当前位置;所以不存在消耗字符与否这个说法,根本就没有字符可以“消耗”。
iyangyuan
2016-11-15 19:10:02 +08:00
只是预测而已,不会匹配到

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/320707

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX