如何在红宝石中使用正则表达式?

时间:2011-12-12 06:05:01

标签: ruby regex

字符串的格式是以下任何一种......语言是ruby

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

我只想匹配“单词”或“单词单词”(两个单词带空格)

到目前为止,我有这个,但它与空间不匹配

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

此外,对于第二个,它似乎正在工作,但某些短语不匹配,即使它们是相同的。我不知道为什么。以下是否有问题? (这是为了匹配“子类别”或“子类别”

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

第一部分只是字母,第二部分可以有任意数量的空格,单词,字符,如/或_

2 个答案:

答案 0 :(得分:3)

试试这个:

^#([^>]*)

[^>]*将匹配任何内容,直到第一个>(或文本末尾) ^并不是真的需要,但它可以保护您免受错误(例如,如果类别包含另一个哈希符号)

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

请注意,您可以在同一场比赛中匹配单词和类别,例如,使用模式:

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

您可以捕获这两个组并使用它们:

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

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

答案 1 :(得分:2)

我不太明白你的问题。

您想以“#XXX> YYY”的形式重审XXX和YYY吗?

在这种情况下,遵循正则表达式将有所帮助:

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

例如:

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