Perl 模式匹配分组

Perl 模式匹配分组,perl,Perl,我有一个像下面这样的行的文件(只粘贴了两行)。这是一个1 GB的大文件 6901:2014-06-30 12:24:58,584 INFO BAS_Connector-thread-3 [com.orga.oslee.ra.bas.BASservice-R2.5.0.19.4] API=[BAS_SEARCH_ACCOUNTS] TID=[6c3be5be-2188-11e4-e004-6e5c369d1712] <

我有一个像下面这样的行的文件(只粘贴了两行)。这是一个1 GB的大文件

6901:2014-06-30 12:24:58,584 INFO                                       BAS_Connector-thread-3 [com.orga.oslee.ra.bas.BASservice-R2.5.0.19.4] API=[BAS_SEARCH_ACCOUNTS] TID=[6c3be5be-2188-11e4-e004-6e5c369d1712] < received from Bas: [Accounts=[], MaxRecordsReached=false, ReferenceId=-9MXF14E0ST6R, IST=2014-06-30T12:24:58.578+05:30]
BAS_EXECUTIONTIME=[00:00:00:19] TID=[6c3be5be-2188-11e4-e004-6e5c369d1712] < received from Bas: {BAS_TID=[0:[6c3be5be-2188-11e4-e004-6e5c369d1712]], BAS_SERVICE=[0:[BAS_ADD_CUSTOMER]], BAS_Customer=[0:[{BAS_CustomerAttributes=[0:[{}]], BAS_NwOperator=[0:[Entel]], BAS_LastModDateTime=[0:[Mon Jun 30 12:24:58 IST 2014]], BAS_ComProfileCodeId=[0:[{BAS_Value=[0:[COM_PROF]], BAS_Domain=[0:[SEGMENT]]}]], BAS_CustomerCategory=[0:[Default]], BAS_AccountCategoryCodeId=[0:[{BAS_Value=[0:[Default]], BAS_Domain=[0:[CUSTOMER]]}]], BAS_OperatorCodeId=[0:[{BAS_Value=[0:[Entel]], BAS_Domain=[0:[CUSTOMER]]}]], BAS_CustomerName=[0:[CU_132539]], BAS_CustomerNumber=[0:[132502]], BAS_OwningCostCenterCodeId=[0:[{BAS_Value=[0:[CST_OWN]], BAS_Domain=[0:[SEGMENT]]}]], BAS_SegmentCodeId=[0:[{BAS_Value=[0:[Account]], BAS_Domain=[0:[CUSTOMER]]}]], BAS_DealerCodeId=[0:[{BAS_Value=[0:[Entel]], BAS_Domain=[0:[SEGMENT]]}]], BAS_BillingProfile=[0:[{BAS_BillFormatCodeId=[0:[{BAS_Value=[0:[w_it_bill]], BAS_Domain=[0:[SEGMENT]]}]], BAS_BillDispatchCodeId=[0:[{BAS_Value=[0:[OIT]], BAS_Domain=[0:[SEGMENT]]}]], BAS_InvoiceCurrencyCodeId=[0:[{BAS_Value=[0:[CLP]], BAS_Domain=[0:[SEGMENT]]}]], BAS_BillPeriodCodeId=[0:[{BAS_Value=[0:[BR01]], BAS_Domain=[0:[SEGMENT]]}]], BAS_Domain=[0:[SEGMENT]]}]], BAS_ScProfileCodeId=[0:[{BAS_Value=[0:[SER_C_PROF]], BAS_Domain=[0:[SEGMENT]]}]], BAS_CustomerId=[0:[132502]], BAS_ReceivingCostCenterCodeId=[0:[{BAS_Value=[0:[CST_RECV]], BAS_Domain=[0:[SEGMENT]]}]]}]], BAS_ReferenceId=[0:[-9MXF14E0ST6R]]}

我不想做替代品

简化正则表达式

在本例中,您尝试匹配两种不同的模式。因此,它们应该是两个不同的正则表达式:

use strict;
use warnings;

while (<DATA>) {
    if (/\bReferenceId=([^,]*)/) {
        print "RefID = '$1'\n";

    } elsif (/\bBAS_ReferenceId=\[ [^\[\]]* \[ ([^\[\]]*) \] \]/x) {
        print "BasID = '$1'\n";
    }
}

__DATA__
6901:2014-06-30 12:24:58,584 INFO                                       BAS_Connector-thread-3 [com.orga.oslee.ra.bas.BASservice-R2.5.0.19.4] API=[BAS_SEARCH_ACCOUNTS] TID=[6c3be5be-2188-11e4-e004-6e5c369d1712] < received from Bas: [Accounts=[], MaxRecordsReached=false, ReferenceId=-9MXF14E0ST6R, IST=2014-06-30T12:24:58.578+05:30]
BAS_EXECUTIONTIME=[00:00:00:19] TID=[6c3be5be-2188-11e4-e004-6e5c369d1712] < received from Bas: {BAS_TID=[0:[6c3be5be-2188-11e4-e004-6e5c369d1712]], BAS_SERVICE=[0:[BAS_ADD_CUSTOMER]], BAS_Customer=[0:[{BAS_CustomerAttributes=[0:[{}]], BAS_NwOperator=[0:[Entel]], BAS_LastModDateTime=[0:[Mon Jun 30 12:24:58 IST 2014]], BAS_ComProfileCodeId=[0:[{BAS_Value=[0:[COM_PROF]], BAS_Domain=[0:[SEGMENT]]}]], BAS_CustomerCategory=[0:[Default]], BAS_AccountCategoryCodeId=[0:[{BAS_Value=[0:[Default]], BAS_Domain=[0:[CUSTOMER]]}]], BAS_OperatorCodeId=[0:[{BAS_Value=[0:[Entel]], BAS_Domain=[0:[CUSTOMER]]}]], BAS_CustomerName=[0:[CU_132539]], BAS_CustomerNumber=[0:[132502]], BAS_OwningCostCenterCodeId=[0:[{BAS_Value=[0:[CST_OWN]], BAS_Domain=[0:[SEGMENT]]}]], BAS_SegmentCodeId=[0:[{BAS_Value=[0:[Account]], BAS_Domain=[0:[CUSTOMER]]}]], BAS_DealerCodeId=[0:[{BAS_Value=[0:[Entel]], BAS_Domain=[0:[SEGMENT]]}]], BAS_BillingProfile=[0:[{BAS_BillFormatCodeId=[0:[{BAS_Value=[0:[w_it_bill]], BAS_Domain=[0:[SEGMENT]]}]], BAS_BillDispatchCodeId=[0:[{BAS_Value=[0:[OIT]], BAS_Domain=[0:[SEGMENT]]}]], BAS_InvoiceCurrencyCodeId=[0:[{BAS_Value=[0:[CLP]], BAS_Domain=[0:[SEGMENT]]}]], BAS_BillPeriodCodeId=[0:[{BAS_Value=[0:[BR01]], BAS_Domain=[0:[SEGMENT]]}]], BAS_Domain=[0:[SEGMENT]]}]], BAS_ScProfileCodeId=[0:[{BAS_Value=[0:[SER_C_PROF]], BAS_Domain=[0:[SEGMENT]]}]], BAS_CustomerId=[0:[132502]], BAS_ReceivingCostCenterCodeId=[0:[{BAS_Value=[0:[CST_RECV]], BAS_Domain=[0:[SEGMENT]]}]]}]], BAS_ReferenceId=[0:[-9MXF14E0ST6R]]}

您能更清楚地了解一下您想要做什么吗?我想要捕获字符串,它可以出现在第十八个BAS_引用ID=[0:[(string_to_capture)]]或ReferenceId=(string_to_capture)中。
use strict;
use warnings;

while (<DATA>) {
    if (/\bReferenceId=([^,]*)/) {
        print "RefID = '$1'\n";

    } elsif (/\bBAS_ReferenceId=\[ [^\[\]]* \[ ([^\[\]]*) \] \]/x) {
        print "BasID = '$1'\n";
    }
}

__DATA__
6901:2014-06-30 12:24:58,584 INFO                                       BAS_Connector-thread-3 [com.orga.oslee.ra.bas.BASservice-R2.5.0.19.4] API=[BAS_SEARCH_ACCOUNTS] TID=[6c3be5be-2188-11e4-e004-6e5c369d1712] < received from Bas: [Accounts=[], MaxRecordsReached=false, ReferenceId=-9MXF14E0ST6R, IST=2014-06-30T12:24:58.578+05:30]
BAS_EXECUTIONTIME=[00:00:00:19] TID=[6c3be5be-2188-11e4-e004-6e5c369d1712] < received from Bas: {BAS_TID=[0:[6c3be5be-2188-11e4-e004-6e5c369d1712]], BAS_SERVICE=[0:[BAS_ADD_CUSTOMER]], BAS_Customer=[0:[{BAS_CustomerAttributes=[0:[{}]], BAS_NwOperator=[0:[Entel]], BAS_LastModDateTime=[0:[Mon Jun 30 12:24:58 IST 2014]], BAS_ComProfileCodeId=[0:[{BAS_Value=[0:[COM_PROF]], BAS_Domain=[0:[SEGMENT]]}]], BAS_CustomerCategory=[0:[Default]], BAS_AccountCategoryCodeId=[0:[{BAS_Value=[0:[Default]], BAS_Domain=[0:[CUSTOMER]]}]], BAS_OperatorCodeId=[0:[{BAS_Value=[0:[Entel]], BAS_Domain=[0:[CUSTOMER]]}]], BAS_CustomerName=[0:[CU_132539]], BAS_CustomerNumber=[0:[132502]], BAS_OwningCostCenterCodeId=[0:[{BAS_Value=[0:[CST_OWN]], BAS_Domain=[0:[SEGMENT]]}]], BAS_SegmentCodeId=[0:[{BAS_Value=[0:[Account]], BAS_Domain=[0:[CUSTOMER]]}]], BAS_DealerCodeId=[0:[{BAS_Value=[0:[Entel]], BAS_Domain=[0:[SEGMENT]]}]], BAS_BillingProfile=[0:[{BAS_BillFormatCodeId=[0:[{BAS_Value=[0:[w_it_bill]], BAS_Domain=[0:[SEGMENT]]}]], BAS_BillDispatchCodeId=[0:[{BAS_Value=[0:[OIT]], BAS_Domain=[0:[SEGMENT]]}]], BAS_InvoiceCurrencyCodeId=[0:[{BAS_Value=[0:[CLP]], BAS_Domain=[0:[SEGMENT]]}]], BAS_BillPeriodCodeId=[0:[{BAS_Value=[0:[BR01]], BAS_Domain=[0:[SEGMENT]]}]], BAS_Domain=[0:[SEGMENT]]}]], BAS_ScProfileCodeId=[0:[{BAS_Value=[0:[SER_C_PROF]], BAS_Domain=[0:[SEGMENT]]}]], BAS_CustomerId=[0:[132502]], BAS_ReceivingCostCenterCodeId=[0:[{BAS_Value=[0:[CST_RECV]], BAS_Domain=[0:[SEGMENT]]}]]}]], BAS_ReferenceId=[0:[-9MXF14E0ST6R]]}
RefID = '-9MXF14E0ST6R'
BasID = '-9MXF14E0ST6R'