正则表达式之间找到文本

时间:2011-08-24 12:30:11

标签: regex

我需要一个正则表达式,它会找到以下文字:

"postmaster"="infonl@bostik.com"
"info"="infonl@bostik.com"
"nobody"="root"

来自输入:

[HKEY_LOCAL_MACHINE\SOFTWARE\Ipswitch\IMail\Domains\bostik.nl\Users\_aliases]
"postmaster"="infonl@bostik.com"
"info"="infonl@bostik.com"
"nobody"="root"

[HKEY_LOCAL_MACHINE\SOFTWARE\Ipswitch\IMail\Domains\bostikfindley.nl]

所以我希望它能抓住从\_alisases]到下一个'[' [HKEY_LOCAL_MACHINE的所有内容,如果可能的话。我将使用它在文本搜索程序中输出此节点下的所有变量文本。

这是一个包含18000行的大文件,我将使用文本搜索进行搜索。还有不包含_aliases的行]它们不应该被返回为有效。

示例:

[HKEY_LOCAL_MACHINE\SOFTWARE\Ipswitch\IMail\Domains\bostik.nl\Users\_aliases]
"postmaster"="infonl@bostik.com"
"info"="infonl@bostik.com"
"nobody"="root"

[HKEY_LOCAL_MACHINE\SOFTWARE\Ipswitch\IMail\Domains\bostikfindley.nl]
"Address"="$virtual291"
"TopDir"="D:\\IMail\\bostikfindley_nl"
"Flags"=dword:00000000
"NotifyAddress"=""
"SubMailboxCreate"=dword:00000000
"NotifyPercent"=dword:00000000
"MaxOutboundSize"=dword:00000000
"VirusScan"=dword:00000001
"MaxSize"=dword:00000000
"MaxMsgs"=dword:00000000
"MaxRcv"=dword:00000000
"MaxUsers"=dword:00000000
"UserCount"=dword:00000001
"EnableSSL"=dword:00000001
"ForceSSL"=dword:00000000
"IcalEnable"=dword:00000001

我只希望被退回:

"postmaster"="infonl@bostik.com"
"info"="infonl@bostik.com"
"nobody"="root"

这必须是我可以在搜索和替换工具中使用的正则表达式来查找我需要的信息。

3 个答案:

答案 0 :(得分:1)

我会在\[.*?\]上用空字符串替换字符串,剩下的字符串就是你的结果。

编辑: 显然,你意味着别的......

如果您只想要这3个属性,请尝试使用此正则表达式:\"(postmaster|info|nobody)\"\=\".+?\"

答案 1 :(得分:1)

由于您没有指定编程语言,因此这是一个执行此任务的Perl脚本:

#!/usr/local/bin/perl 
use strict;
use warnings;

while(<DATA>) {
    if (/_aliases\]/ ... /\[HKEY/) {
        print unless /\[/;
    }
}

__DATA__
[HKEY_LOCAL_MACHINE\SOFTWARE\Ipswitch\IMail\Domains\bostik.nl\Users\_aliases]
"postmaster"="infonl@bostik.com"
"info"="infonl@bostik.com"
"nobody"="root"

[HKEY_LOCAL_MACHINE\SOFTWARE\Ipswitch\IMail\Domains\bostikfindley.nl]
"Address"="$virtual291"
"TopDir"="D:\\IMail\\bostikfindley_nl"
"Flags"=dword:00000000
"NotifyAddress"=""
"SubMailboxCreate"=dword:00000000
"NotifyPercent"=dword:00000000
"MaxOutboundSize"=dword:00000000
"VirusScan"=dword:00000001

<强>输出

"postmaster"="infonl@bostik.com"
"info"="infonl@bostik.com"
"nobody"="root"

答案 2 :(得分:0)

if ($subject =~ m/"(.*)\[.*/s) 
$result = $1;

这适用于perl。我不知道你将使用哪种语言,因此它可能会有所不同。

编辑:我看到你改变了原帖,所以我将不得不重新考虑。

编辑2:它适用于您的示例。