2010-05-08 50 views
0

我有以下表現:Ruby的正則表達式不匹配的有效表達

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

這只是看起來匹配的數學表達式,其中用戶被提示通過基本運算符分開的術語(例如:價格+稅)

用戶可以輸入不僅僅是2條款和一個操作者以上(例如:價格+稅+ moretax)

我在Rubular中測試了這個表達式http://rubular.com/

與術語:

A + A(MATCH)
A + A + A(MATCH)
A + A +
一個+
AA
一個+ AA

一切的作品,但是當我在Ruby中使用它時,它不起作用!

表達=〜/^\ W(\ S(+ | - |/| *)\ S \ W)* $/

我開始分開採摘的表達,發現如果我刪除的開始它會發現匹配但是不正確。

A + A(MATCH)
一個一(MATCH)< - 這是不正確的

爲什麼不Ruby代碼工作這體現在哪裏? (我使用Ruby 1.8.7 P174)

+0

請在代碼行之前放置四個空格,以使代碼突出顯示。 – 2010-05-09 23:50:13

回答

0

我應該用\ w +,我可以收到多個字符的條款......

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

感謝大家的回覆。

+1

您仍然會收到錯誤消息,因爲您沒有轉義+和*。^\ w +(\ s(\ + | - | \/| \\ *)\ s \ w +)$也許? – 2010-05-08 01:26:50

0

這IRB工作對我來說:

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

當我看到這個測試時燈亮了......我正在測試單個字符,但我正在接收單詞。我應該使用\ w + – 2010-05-08 01:21:14

0

這應該工作:/^(\w+)(?:\s*(\+|\-|\*|\/)\s*(\w+))*$/ 我加一些捕捉反向參照