Regex SyntaxError:(irb):4:向后看(正向向后看/向前看)模式无效
我试图编写一个正则表达式替换模式,以替换散列中的一个数字,如下所示:Regex SyntaxError:(irb):4:向后看(正向向后看/向前看)模式无效,regex,ruby,regex-lookarounds,gsub,regexp-replace,Regex,Ruby,Regex Lookarounds,Gsub,Regexp Replace,我试图编写一个正则表达式替换模式,以替换散列中的一个数字,如下所示: some_dict={ 测试:123 } 这样就可以捕获并替换123个 (?原因是Ruby的Onigom正则表达式引擎不支持无限宽的查找模式 在一般情况下,包含诸如*、+或{x,}等量词的肯定lookbehind通常可以用消费模式替换,后跟\K: /(?:|\t*[a-zA-Z0-9|]+:|\t+\K\d+(?=*)/ #^^^ ^^ 但是,您甚至不需要这种复杂的模式
some_dict={
测试:123
}
这样就可以捕获并替换123个
(?原因是Ruby的Onigom正则表达式引擎不支持无限宽的查找模式
在一般情况下,包含诸如*
、+
或{x,}
等量词的肯定lookbehind通常可以用消费模式替换,后跟\K
:
/(?:|\t*[a-zA-Z0-9|]+:|\t+\K\d+(?=*)/
#^^^ ^^
但是,您甚至不需要这种复杂的模式。(?=.*)
是多余的,因为它不需要任何东西,*
甚至匹配一个空字符串。如果当前位置的左侧有空格或制表符,则会触发正向查找模式。正则表达式等于
.gsub(/(?<=[ \t])\d+/, "321")
.gsub(/(?如果有任何可能在123
之后出现一个数字,比如在注释中,我是否也需要添加一个前瞻?@notacorn正向前瞻用于要求特定的字符串上下文。*
匹配一个空字符串,那么您的正向前瞻是多余的。仅供参考:用于测试Ruby regexp