Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
两个环视的regex组合-regexstorm.net_Regex_Regex Lookarounds - Fatal编程技术网

两个环视的regex组合-regexstorm.net

两个环视的regex组合-regexstorm.net,regex,regex-lookarounds,Regex,Regex Lookarounds,我必须用正则表达式从文本中收集两个信息。然后将名称和数据库关联到一个表中。但a只能单独收集 这是一个例子,我有很多这样的块,其中两个没有数据库值,我需要忽略它们 [SCD] {I need the name between []} Driver=/opt/pcenter/pc961/ODBC7.1/lib/DWmsss27.so Description= Database=scd {I need the value after Defaut|Database} Address=####### L

我必须用正则表达式从文本中收集两个信息。然后将名称和数据库关联到一个表中。但a只能单独收集

这是一个例子,我有很多这样的块,其中两个没有数据库值,我需要忽略它们

[SCD] {I need the name between []}
Driver=/opt/pcenter/pc961/ODBC7.1/lib/DWmsss27.so
Description=
Database=scd {I need the value after Defaut|Database}
Address=#######
LogonID=######
Password=######
QuoteId=No
AnsiNPW=No
ApplicationsUsingThreads=1
要查找名称的正则表达式是:

(?<=\[)(.*)(?=\])

(?要匹配这两个值,您可以使用两个捕获组,并使用重复模式和负前瞻来检查一行是否以数据库的默认值开始,直到该行开始

\[([^]]+)\](?:\r?\n(?!Default|Database).*)*\r?\n(?:Default|Database)=(\S+)
关于图案

  • \[
    匹配
    [
  • 捕获组1
    • [^]]+
      匹配1+次不
      ]
  • 关闭第1组
  • \]
    匹配
    ]
  • (?:
    非捕获组
    • \r?\n
      匹配换行符
    • (?!
      负向前看,断言直接在右边的不是
      • Default |数据库
        匹配其中一个选项
    • ).*
      关闭负前瞻并匹配除换行符外的任何字符0+次
  • )*
    关闭非捕获组并重复0多次
  • \r?\n(?:默认|数据库)=
    匹配换行符、任何选项和
    =
  • (\S+)
    捕获组2,将非空白字符匹配1+次(或使用
    (.+)
    将任何字符匹配1+次)


尝试
Regex.Matches(s,@)(?单击可将答案标记为已接受✓ 上。
\[([^]]+)\](?:\r?\n(?!Default|Database).*)*\r?\n(?:Default|Database)=(\S+)