2016-09-20 47 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單獨存儲它們。