Perl正则表达式搜索和替换不匹配

时间:2012-09-05 14:39:50

标签: regex perl search

我正在尝试使用perl来搜索和替换一些过时的MySQL命令

perl -i -pe 'BEGIN{undef $/;} s/if @RequestID.*@NextValue=@TableNameID output/if @RequestID is not NULL\n                begin\n                        select @TableNameID = @TableNameID + 1/smgi' $file1

然而目前文件在暗示正则表达式不匹配之前和之后仍然完全相同?

我已打开标记smgi,因此.*也会根据Multiline search replace with Perl

的建议匹配新行

以下是我要匹配的文件片段

        if ( @@rowcount = 0 )
                return 1

        update Sequence set CurrentValue = @TableNameID where Code = 'TableName'
end

/* TableNames - Approval Request ID */
if @RequestID is not NULL
begin
        exec spGetNextSequence @Name='TableName', @NextValue=@TableNameID output

        insert into TableName        /* RequestID */
        (
                TableNameID,
                TxnVrsnID,
                FldNmCod,

如果您在http://regexpal.com/(或任何类似的正则表达式测试人员)上测试模式 - 其中smi匹配正常吗?

模式:if @ApprovalRequestID.*@NextValue=@TxnDecoratorID output


这是perl稍微分开,所以你可以看到发生了什么

perl -i -pe 'BEGIN{undef $/;} s/
if @RequestID.*@NextValue=@TableNameID output/
if @RequestID is not NULL\n
                begin\n
                        select @TableNameID = @TableNameID + 1
/smgi' $file1

1 个答案:

答案 0 :(得分:5)

@name被插值为正则表达式模式中的命名Perl数组。转义@个字符:

perl -i -pe 'BEGIN{undef $/;} s/
if \@RequestID.*\@NextValue=\@TableNameID output/
if \@RequestID is not NULL\n
                begin\n
                        select \@TableNameID = \@TableNameID + 1
/smgi' $file1