Ruby RegEx与有效表达式不匹配

时间:2010-05-08 00:57:04

标签: ruby regex

我有以下表达式:

^ \ W(\ S(+ | - | / | *)\ S \ W)* $

这简单地看起来匹配一个数学表达式,其中提示用户输入由基本运算符分隔的术语(例如:价格+税)

用户可以输入超过2个条款和一个运营商(例如:价格+税+更多)

我在Rubular http://rubular.com/

中测试了这个表达式

使用条款:

a + a(MATCH)
a + a + a(MATCH)
a + a +
a +
a a a + a a

一切正常,但是当我在Ruby中使用它时它不起作用!

expression =〜/ ^ \ w(\ s(+ | - | / | *)\ s \ w)* $ /

我开始分开选择表达式并注意到如果我删除行符号的开头,它会找到匹配但不正确。

a + a(MATCH)
a(MATCH)< - 这是不正确的

为什么这个表达式在Ruby代码中不起作用? (我使用的是Ruby 1.8.7 p174)

4 个答案:

答案 0 :(得分:0)

这对我来说非常有用:

expression =~ /^\w(\s(\+|-|\/|\*)\s\w)*$/

我用你的条款测试了它:

irb(main):019:0> expressions = ["a + a", "a + a + a", "a + a +", 
                 "a +", "a a", "a + a a"]
=> ["a + a", "a + a + a", "a + a +", "a +", "a a", "a + a a"]
irb(main):023:0> expressions.each { |expression|
irb(main):024:1* puts expression =~ /^\w(\s(\+|-|\/|\*)\s\w)*$/
irb(main):025:1> }
0
0
nil
nil
nil
nil

答案 1 :(得分:0)

这应该有效:/^(\w+)(?:\s*(\+|\-|\*|\/)\s*(\w+))*$/ 我为反向引用添加了一些捕获

答案 2 :(得分:0)

您可以尝试:

/^\w(\s(\+|-|\/|\*)\s\w)*$/

答案 3 :(得分:0)

我应该使用\ w +,因为我可以收到多个角色的条款......

^ \ W +(\ S(+ | - | / | )\ S \ W +) $

感谢大家的回复。