Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 相当于Vim';s regex开始和结束匹配(`\zs`和`\ze`)?_Ruby_Regex_Atom Editor_Oniguruma - Fatal编程技术网

Ruby 相当于Vim';s regex开始和结束匹配(`\zs`和`\ze`)?

Ruby 相当于Vim';s regex开始和结束匹配(`\zs`和`\ze`)?,ruby,regex,atom-editor,oniguruma,Ruby,Regex,Atom Editor,Oniguruma,如果我只想用Atom中的其他东西替换匹配的一部分,我会怎么做 Ruby正则表达式解决方案可能会起作用,因为Ruby使用的正则表达式引擎非常类似于Oniguruma(Atom使用的) 我发现一个上面写着\G设置了一个匹配的开始位置,但这对我不起作用 我认为Ruby与\zs和\ze没有直接的等价物,但是可以使用lookahead((?=pat))和lookahead((?('abc'.match/)# [2] 撬(主)>('bc'。匹配/(?无 [3] 撬(主)>('ab'.匹配/(?无 不幸的是

如果我只想用Atom中的其他东西替换匹配的一部分,我会怎么做

Ruby正则表达式解决方案可能会起作用,因为Ruby使用的正则表达式引擎非常类似于Oniguruma(Atom使用的)


我发现一个上面写着
\G
设置了一个匹配的开始位置,但这对我不起作用

我认为Ruby与
\zs
\ze
没有直接的等价物,但是可以使用lookahead(
(?=pat)
)和lookahead(
(?('abc'.match/)#
[2] 撬(主)>('bc'。匹配/(?无
[3] 撬(主)>('ab'.匹配/(?无
不幸的是,Ruby的lookbehind需要固定大小的模式(或几个固定大小的替代品)——Vim的
\zs
没有限制。

Ruby曾经用作正则表达式引擎,但后来它切换到了(Oniguruma的分支)Onigom支持几个新的构造,例如条件构造和例程调用(它允许您编写递归正则表达式)

\zs
直接等效的是
\K
,它仅在Onigom中受支持。请注意,
\K
和look behind并不等效

为了演示其中一种情况,给定字符串
aaaa

  • a\Ka
    有两个从索引1、3开始的匹配项,但这些匹配项是在引擎在索引0和2执行搜索时找到的

  • (?ruby中匹配的开始是:\GThanks。不幸的是,它不适用于Atom。
    
    [1] pry(main)> ('abc'.match /(?<=a)b(?=c)/)
    => #<MatchData "b">
    [2] pry(main)> ('bc'.match /(?<=a)b(?=c)/)
    => nil
    [3] pry(main)> ('ab'.match /(?<=a)b(?=c)/)
    => nil