2011-12-12 60 views
1

格式字符串的是下列任何...語言是紅寶石如何在ruby的正則表達式中做到這一點?

#word > subcategory 
#word word > sub/category 
#word > sub category 
#word word > subcategory 

我只想到目前爲止匹配「字」或「詞話」(兩個詞用空格)

我有這個,但它不匹配的空間

scan(/#([^ ]*)/)[0] 

而且,它似乎是工作然而,某些短語匹配的arent即使他們是相同的第二個。我不知道爲什麼。以下是否有問題? (這是爲了匹配「子類別」或「子類別」

scan(/.* > (.*)$/)[0] 

是字母只,第二部分可以具有與任何數量的空格,單詞,字符/或_第一部分

回答

2

我不太明白你的問題。

是否要以「#XXX> YYY」的形式回顧XXX和YYY?

在這種情況下,下面的正則表達式將幫助:

scan(/#([^>]*?) *> *(.*)$/) 

例如:

> "#world world > sub/category".scan(/#([^>]*?) *> *(.*)$/) 
=> [["world world", "sub/category"]] 
3

嘗試此:

^#([^>]*) 

[^>]*將匹配任何東西,直到第一>(或文本的結尾)
^是不是真的需要,但它可以保護你從錯誤(對。例如,如果類別包含另一個井號)

工作例如:http://rubular.com/r/LO6T9AV3rp

注意,您可以同時匹配詞,在同一場比賽的類別,例如,使用模式:

^#([^>]*)>(.*)$ 

您可以捕獲這兩個羣體,並使用它們:

s = "#word word > sub/category" 
m = s.scan(/^#([^>]*)>(.*)$/) 
puts m[0] 
puts m[1] 

工作例如:http://ideone.com/SPlvm

+0

謝謝芒。我將如何排除最後的空間?就在> – Tallboy

+0

@Tallboy之前 - 在這種情況下,你應該與cinsk的答案一起去。我太慢':)' – Kobi