正则表达式帮助和指导

时间:2012-02-29 21:04:52

标签: ruby regex

我想使用正则表达式返回"John Doe"

string = "{name} John Doe {phone} 555-5555"

我真的想掌握正则表达式。你是怎么学习的?

2 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点。只是第一次尝试:

/\{name\}(.+)\{phone\}/

测试here。我学会了阅读this本书。

答案 1 :(得分:1)

对于这样的事情,通常最好是标记化,然后使用某种中间表示。 String#scan非常适合从重复模式中提取数据:

string = "{name} John Doe {phone} 555-5555"

string.scan(/\{([^}]+)\}\s+([^\{]+)/).collect { |s| s.each { |c| c.sub!(/\s+$/, '') } }
# => [["name", "John Doe"], ["phone", "555-5555"]]

你甚至可以简单地将其重新映射为哈希:

Hash[string.scan(/\{([^}]+)\}\s+([^\{]+)/).collect { |s| s.each { |c| c.sub!(/\s+$/, '') } }]
# => {"name"=>"John Doe", "phone"=>"555-5555"}

掌握正则表达式的关键是首先学习如何阅读它们,然后进行大量试验以了解它们的行为方式。拥有像Rubular这样的工具可以帮助进行探索,但有几本关于这个主题的好书值得一看。 O'Reilly有一个相当强大的选择,还有其他。

我的经验主要来自Perl,它使用正则表达式来处理各种各样的事情。