正则表达式的两个环视相结合-regexstorm.net

时间:2019-07-12 17:08:11

标签: regex regex-lookarounds

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

这是一个示例,我有很多这样的块,然后有两个没有数据库值,这些我需要忽略

[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

查找名称的正则表达式为:

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

在数据库为

后查找值的正则表达式
(?<=Defaut|Database=)(.*)

我如何将两者都合并到onde regex中?

1 个答案:

答案 0 :(得分:1)

要同时匹配这两个值,您可以使用2个捕获组,并使用重复模式和负前瞻来检查某行是否不以Default of Database(数据库的默认值)开头,直到该行开始为止。

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

关于图案

  • \[匹配[
  • (捕获组1
    • [^]]+匹配1次以上而不是]
  • )关闭第1组
  • \]匹配]
  • (?:非捕获组
    • \r?\n匹配换行符
    • (?!负向查找,断言直接在右边的不是
      • Default|Database匹配选项之一
    • ).*结束负向查找,并匹配除换行符0次以上以外的所有字符
  • )*关闭非捕获组并重复0次以上
  • \r?\n(?:Default|Database)=匹配换行符,任意选项和=
  • (\S+)捕获第2组,将非空白字符匹配1次以上(或使用(.+)匹配1次以上字符)

regexstorm demo

enter image description here