2014-12-04 59 views
0

我想从我在内存中读取并存储在数据变量中的文件中获取值dba,dba1,dba2。使用Ruby中的正则表达式匹配特定的开始和结束字符模式

/host/sec/sc1/db_usr/user = dba 
/host/sec/sc1/db_usr1/user = dba1 
/host/sec/sc1/db_usr2/user = dba2 

我想下面的正则表达式:

data.split("\n").grep(/\/host\/sec\/S\/user/).map{ |l| l.split.last } 

但它返回nil值。

我在这里做错了什么?

回答

0
> str = "/host/sec/sc1/db_usr/user = dba 
* /host/sec/sc1/db_usr1/user = dba1 
* /host/sec/sc1/db_usr2/user = dba2" 
=> "/host/sec/sc1/db_usr/user = dba\n/host/sec/sc1/db_usr1/user = dba1\n/host/sec/sc1/db_usr2/user = dba2" 

> str.scan(%r!/user = (.*)?(?:\n|\z)!).flatten 
=> ["dba", "dba1", "dba2"] 

有可能是将不涉及flatten但上述工作更好的办法。

这里的另一种选择:

> str.split("\n").map {|e| e.split(" = ").last} 
=> ["dba", "dba1", "dba2"] 
相关问题