Regex 匹配变量=值但忽略尾随空格和注释的正则表达式

Regex 匹配变量=值但忽略尾随空格和注释的正则表达式,regex,Regex,我试图解析一个驱动程序inf文件,并从节中提取“变量”和“值”。 我提出了一个基本的正则表达式: "(.+?)\s*=\s*(.+)" 这匹配变量fine,但它匹配等于和空格后的所有内容。在这些文件中,可能会有以分号开头的尾随注释,我不希望它们匹配。我想我应该试试: "(.+?)\s*=\s*(.+);?" 但它不起作用。另一个问题是分号前可能有空格,我也想忽略它,但我想匹配的值中可能有空格。以下是一些示例(使用变量作为第一个匹配项,使用值作为第二个匹配项): Class=显示(变量应为“C

我试图解析一个驱动程序inf文件,并从节中提取“变量”和“值”。 我提出了一个基本的正则表达式:

"(.+?)\s*=\s*(.+)"
这匹配变量fine,但它匹配等于和空格后的所有内容。在这些文件中,可能会有以分号开头的尾随注释,我不希望它们匹配。我想我应该试试:

"(.+?)\s*=\s*(.+);?"
但它不起作用。另一个问题是分号前可能有空格,我也想忽略它,但我想匹配的值中可能有空格。以下是一些示例(使用变量作为第一个匹配项,使用值作为第二个匹配项):

Class=显示(变量应为“Class”,值为“Display”

DefaultDestDir=11;system32(variable=“DefaultDestDir”和value=“11”)

cpuxyz=16483,au-zy-xy-open;注释(variable=“cpuxyz”和value=“16483,au-zy-xy-open”)


我希望扩展我的初始正则表达式,以便“value”可以处理上述所有示例。

下面的正则表达式将变量及其对应的值划分为组

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

说明:

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

    • 负面角色类是你的朋友

      你真幸运,我今天口袋里有一些

      ^([^=\s]+)[ ]*=[ ]*([^;\r\n]+)
      
      在中,查看右侧窗格中的捕获组

      解释

      • ^
        锚定声明我们位于字符串的开头
      • 在第一个
        (捕获组)
        ,负字符类
        [^=\s]+
        匹配一个或多个非
        =
        字符或空白字符(包括换行符)
      • []*
        匹配可选空格。括号不需要,它们是为了清晰起见
      • =
        匹配文本
        =
      • []*
        匹配可选空格
      • 在第二个
        (捕获组)
        ,负字符类
        [^;\r\n]+
        匹配一个或多个非
        或换行字符

      试试
      (.+?)\s*=\s*([^;\n]+)\s
      @zx81对不起,我的笔记本电脑要关机了。我会在7小时后收到你的。这不是我想聊的,但在这种模式下,一个问题(我看到的)是,使用这个字符串“我的长变量=显示”,“变量将是我的长变量”(前面有无限的空格)。没关系。没有变量有空格,只有值。@Lembarts我刚刚意识到final\s*;不会删除值中的空格,只有在结尾有分号的空格。如果有一行结尾没有分号注释怎么办?您能做吗?*@M42谢谢M42!:)@m42-这是一个很好的方法,可以帮助我更好地使用正则表达式。唯一剩下的是值末尾的尾随空格,但我可以使用编程“trim”函数来消除这些空格,而不是使regexp复杂化。非常欢迎,很高兴它有所帮助。您可以通过在末尾添加一个负的lookback来删除最后的空格,以声明前面的字符不是空格:
      ^([^=\s]+)[]*=[]*([^;\r\n]+)(?请看@zx81-您能用英语解释最后一组括号在做什么吗?我知道最后一组括号是这样说的“匹配等号后面的第一个字符和非分号的可选空格或返回,直到”
      (?反向查找断言紧跟其后的不是空格字符。空格是关闭括号之前的最后一个字符。强制
      [^;\r\n]+
      如果它有匹配的尾随空格(它可以),则返回。我们无法在
      [^;\r\n]+
      中添加空格,因为我们希望他能够匹配
      AB
      请参见