草庐IT

oniguruma

全部标签

ruby - 为什么 =~ 运算符只是有时有副作用?

我注意到Ruby/Oniguruma中的副作用仅出现在4个看似等效的语句中的1个中。为什么变量是day在009中定义,但不在003中,005或007?irb(main):001:0>r=/(?\d\d):(?\d\d)/=>/(?\d\d):(?\d\d)/irb(main):002:0>r=~"24:12"=>0irb(main):003:0>dayNameError:undefinedlocalvariableormethod`day'irb(main):004:0>"24:12"=~r=>0irb(main):005:0>dayNameError:undefinedlocalva

ruby - Ruby 1.9 正则表达式是否与上下文无关语法同样强大?

我有这个正则表达式:regex=%r{\A(?a\ga|b\gb|c)\Z}x当我针对多个字符串测试它时,它似乎与上下文无关语法一样强大,因为它正确地处理了递归。regex.match("aaacaaa")#=>#regex.match("aacaa")#=>#regex.match("aabcbaa")#=>#regex.match("aaacaa")#=>nil"FunwithRuby1.9RegularExpressions"有一个例子,他实际上安排了一个正则表达式的所有部分,使其看起来像一个上下文无关的语法,如下所示:sentence=%r{(?cat|dog|gerbil){

ruby - 使用递归正则表达式(如 perl)在 Ruby 中匹配平衡括号

我一直在寻找一种方法来匹配正则表达式中的平衡括号,并在Perl中找到了一种使用递归正则表达式的方法:my$re;$re=qr{\((?:(?>[^()]+)#Non-parenswithoutbacktracking|(??{$re})#Groupwithmatchingparens)*\)}x;来自perlregularexpressionsite.有没有办法用Ruby或类似的语言做到这一点?更新:对于那些感兴趣的人,这里有一些有趣的链接:Onigurumamanual-来自Sawa的回答。PragmaticProgrammers'Ruby1.9RegularExpressionsS

ruby - 量词和回顾的问题

###Ruby1.8.7###require'rubygems'require'oniguruma'#forlook-behindOniguruma::ORegexp.new('h(?=\w*)')#=>/h(?=\w*)/Oniguruma::ORegexp.new('(?ArgumentError:OnigurumaError:invalidpatterninlook-behindOniguruma::ORegexp.new('(?/(?#"hello".match(/(?SyntaxError:(irb):3:invalidpatterninlook-behind:/(?#我不能

c++ - 与其他跨平台正则表达式库相比,Oniguruma 有多好?

我们正试图摆脱boost::regex和它糟糕的性能。根据this基准,Oniguruma总体来说是最好的。我们有多个正则表达式(并且总是在变化),我们将它们应用于从中等(100个字符)到巨大(1k个字符)的字符串......所以这是一个非常异构的环境。你们中有人成功地使用过它吗?您是否建议选择更“标准”的,如PCRE或RE2?谢谢! 最佳答案 这两种实现方式(FSA和BT)具有完全不同的行为,您可以在此处的右侧栏(电子邮件)中看到。oniguruma通常速度很快,但如果您对特定正则表达式“不走运”,则有可能运行缓慢。那是因为它是一

ruby - Oniguruma 正则表达式引擎中的命名子程序?

在Perl中,您可以这样做:(?x)(?(DEFINE)(?dog|cat))(?&animal)在Ruby(Oniguruma引擎)中,似乎(?(DEFINE...不支持语法。另外,(?&...变成\g.所以,你可以这样做:(?x)(?dog|cat)\g当然,这不等同于我上面给出的Perl示例,因为第一个(?dog|cat)不会被忽略,因为没有类似(?(DEFINE...的东西.如果我想用一堆命名子程序定义一个大型正则表达式,我以前可以用Perl做的事情就不能用这种方法来完成。看起来我确实可以通过做这样的事情来拼凑一个非常尴尬的解决方案:(?x)(?:^$DEFINE(?dog|c