2014-02-07 63 views
0

在Ruby 1.8.7中,以下正则表达式警告:嵌套重复运算符+和*被替换为'*'。Ruby 1.8.7中的正则表达式错误,但不是2.0?

^(\w+\.\w+)\|(\w+\.\w+)\n+*$ 

它确实在Ruby 2.0中工作?

http://rubular.com/r/nRUSP5LNZA

+0

'x + *'不是我熟悉的构造;这是一个Ruby的东西?另外,为什么不使用'^(\ w + \。\ w +)\ |(\ w + \。。w +)$'? –

+0

其实@pswg我确定我的正则表达式也是错误的,我真正想要的是必须有一个或多个行上的管道分隔两个文件,这似乎是在http://rubular.com/r/nRUSP5LNZA – kreek

+0

找出/ ^((\ w + \。\ w +)\ |(\ w + \。\ w +)(\ r \ n)*)* $ /' – kreek

回答

3

嵌套操作者的作品,但被警告,因为它是无用的。 \n+*手段:

  • 零或
  • 一个或
  • \n

更repeatition更repeatition这相当于一个更简单的表达式\n*,这意味着:

  • 零次或多次重复
  • \n

没有理由使用\n+*。在Ruby 1.9和Ruby 2.0中,Ruby正则表达式引擎被替换了,如果有任何区别,那么更新的引擎不会像老版本那样检查警告。

+0

是的,您应该使用'+'或'*'但不是两者。 – tadman