【问题标题】:how to escape a single quote (onwer's) in yaml file如何在yaml文件中转义单引号(onwer)
【发布时间】:2016-09-20 12:37:36
【问题描述】:

我有一个正则表达式

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

它在所有者处引发解析错误

我什至尝试使用双引号并在 Online YAML Parser 中尝试过,但它抛出了一个错误

请帮我解决这个问题。

【问题讨论】:

  • “我有一个正则表达式”——不,不是真的。 /.../ 创建一个正则表达式,而 '...' 创建一个字符串。
  • 您是否尝试将字符串存储在 YAML 文件中,该文件在解析文件后可以转换为正则表达式?
  • 是的,我正在将字符串存储在 yaml 文件中,并使用正则表达式在 ruby​​ 中解析

标签: ruby yaml


【解决方案1】:

如果你有一个实际的正则表达式:(为了简洁而缩短)

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 单独存储它们。

【讨论】:

    猜你喜欢
    • 2020-02-06
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 2023-04-02
    • 2012-12-05
    相关资源
    最近更新 更多