2016-09-20 288 views
-1

我有一个正则表达式如何逃避YAML文件中的单引号(onwer的)

'Tid [\d]+ FAILED to get HPK lock.*tid = (?<tid>[\d]+), caller|Failed to get HPK lock [\w]+, owner's PID (?<tid>[\d]+)' 

它投掷解析错误业主的

我甚至用双引号审判和在线试YAML分析器但它是抛出一个错误

请帮我解决这个问题。

+0

_“我有一个正则表达式”_ - 不,不是真的。 '/.../'创建一个正则表达式,而''...''创建一个字符串。 – Stefan

+0

您是否试图在解析文件后将其转换为正则表达式的YAML文件中存储字符串? – Stefan

+0

是的确切 - 我正在yaml文件中存储字符串解析与正则表达式的红宝石 – sireesha

回答

0

如果你有一个实际的正则表达式:(简称为简洁起见)

re = /owner's PID (?<tid>[\d]+)/ 
#=> /owner's PID (?<tid>[\d]+)/ 

您可以通过source得到它的字符串表示:

re.source 
#=> "owner's PID (?<tid>[\\d]+)" 

这可以在YAML使用:

require 'yaml' 
yaml = { 'pattern' => re.source }.to_yaml 
#=> "---\npattern: owner's PID (?<tid>[\\d]+)\n" 

puts yaml 

输出:

--- 
pattern: owner's PID (?<tid>[\d]+) 

解析它:

hash = YAML.load(yaml) 
#=> {"pattern"=>"owner's PID (?<tid>[\\d]+)"} 

而且正则表达式可以通过创建:

Regexp.new(hash['pattern']) 
#=> /owner's PID (?<tid>[\d]+)/ 

注意Regexp#source不保留正则表达式的options。您可能需要通过Regexp#options单独存储它们。