【问题标题】:Regex for multiline .ini file多行 .ini 文件的正则表达式
【发布时间】:2017-07-12 15:08:58
【问题描述】:

我尝试创建一个可以解析 ini 文件的正则表达式。

但我希望 ini 值可以是多行的!

像这样:

Wert1=Hallo
dsadasd
Wert2=Hi
Wert3=Heinirch Volland

我尝试使用这个正则表达式,但它不起作用:

/.*=(.*)^.*=/gsm

【问题讨论】:

标签: regex ini


【解决方案1】:

您可能正在使用这个 PCRE 正则表达式:

/^.*=.*[^=]*$/gm

试试here

这依赖于single-line 标志的缺失,注意不要设置它。 multiline 标志也是必需的,如果合适可以使用global。

这从包含等号 (^.*=.*) 的行首开始匹配,然后将匹配尽可能多的不包含等号的整行 ([^=]*$,其中[^=] 将匹配换行符)。

【讨论】:

    【解决方案2】:

    您似乎正在使用 Perl。您是否考虑过使用Config::IniFiles?该模块将为您处理解析 INI 类型的文件,并支持使用 heredoc 语法的多行参数:

    Parameter=<<EOT
    value/line 1
    value/line 2
    EOT
    

    或者,如果您使用 Config::IniFiles-&gt;new(..., -allowcontinue =&gt; 1); 启用它,则续行:

    [Section]
    Parameter=this parameter \
      spreads across \
      a few lines
    

    【讨论】:

      【解决方案3】:

      我猜你正在尝试获取所有 ini 值,为此你可以使用这个正则表达式模式:

      /^(.*)=(.*)/gm
      

      您可以使用组访问您的值,每个组将检索您的键和值

      【讨论】:

      • 这不会匹配没有single-line 标志的多行值,并且会过于贪婪地匹配它
      猜你喜欢
      • 2021-04-08
      • 2023-04-05
      • 1970-01-01
      • 2019-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      相关资源
      最近更新 更多