论坛首页 编程语言技术论坛

ruby 正则表达式匹配但不包含

浏览 3705 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-02-25   最后修改:2009-02-25
有个解析需求{sdbeis}
的到括号内的字符串
也可以是<html>...</html>
按说应该用
(?=\{)[^{}]*

或者
[^{}]*(?=\})

或者
(?=\{)[^{}]*(?=\})


实际上这种,匹配但并不在范围内的正则表达,只有在后面有用。就是说第一和第三的匹配都不能达到要求,第一个匹配成了{sdbeis,第三个有逻辑错误,没有匹配结果。只有第二个可以满足要求。
   发表时间:2009-02-25   最后修改:2009-02-26
你用的这个本来就是look ahead(零宽度肯定预查),看名字也知道是用在后面的了。
ruby1.9有look behind了,分别是零宽度肯定回顾(?<=)和零宽度否定回顾(?<!)
0 请登录后投票
   发表时间:2009-02-25   最后修改:2009-02-25

irb(main):003:0> str="{{sf}s{ssf}"
irb(main):003:0> str.scan(/\{(.*?)\}/).to_s
=> "{sfssf"
0 请登录后投票
   发表时间:2009-02-25  
嗯同orange0513,楼主需要的是环视(lookaround),包括正向环视(lookahead)和逆向环视(lookbehind)都需要。“环视”这个翻译方式是从《精通正则表达式》的中文版看到的,觉得这词翻得不错。之前有一帖也用到过lookahead和lookbehind的组合,http://rednaxelafx.iteye.com/blog/193648
0 请登录后投票
   发表时间:2009-02-25  
受教了^_^
你们的办法好
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics