正则表达式匹配variable = value但忽略尾随空格和注释

时间:2014-06-26 05:10:27

标签: regex

我正在尝试解析驱动程序inf文件并提取"变量"和"价值观"从部分。 我想出了一个基本的正则表达式:

"(.+?)\s*=\s*(.+)"

这匹配变量fine,但它匹配equals和whitespace之后的所有内容。在这些文件中,可以选择以分号开头的尾随注释,我不希望这些注释匹配。我想我会尝试:

"(.+?)\s*=\s*(.+);?"

但它不起作用。另一个问题是分号前可能有空格,我也想忽略但是我想要匹配的值中可能有空格。以下是一些示例(使用变量作为第一个匹配,将值作为第二个匹配):

Class = Display(变量应为" Class"值为" Display"

DefaultDestDir = 11; system32(变量=" DefaultDestDir"和值=" 11")

cpuxyz = 16483,au zy xy open;评论(变量=" cpuxyz"和值=" 16483,au zy xy open")

我希望扩展我的初始正则表达式,以便"值"可以应付所有上述例子。

2 个答案:

答案 0 :(得分:2)

负面角色类是您的朋友

幸运的是,今天我口袋里有一些东西。

^([^=\s]+)[ ]*=[ ]*([^;\r\n]+)

the demo中,查看右侧窗格中的捕获组。

<强>解释

  • ^锚点断言我们位于字符串的开头
  • 在第一个(capture group)中,否定字符类[^=\s]+匹配一个或多个不是=的字符或一个空白字符(包括换行符)
  • [ ]*匹配可选空格。不需要括号,为了清楚起见,它们就在那里
  • =与文字=
  • 相匹配
  • [ ]*匹配可选空格。
  • 在第二个(capture group)中,否定字符类[^;\r\n]+匹配一个或多个不是;或换行符字符的字符

答案 1 :(得分:0)

下面的正则表达式会将变量和相应的值组合成组,

(.+?)\s*=\s*(.+?)\s*;

DEMO

<强>解释

  • (.+?)\s*匹配并捕获从行首到\s字符的一个或多个字符。(?使正则表达式引擎匹配最短的可能性)
  • =文字=符号
  • \s*零个或多个空格。
  • (.+?)\s*匹配并捕获从行首到\s字符的一个或多个字符。
  • ;字面分号。