多线模式在perl中搜索和替换

时间:2014-11-26 18:34:56

标签: regex perl

我正在尝试使用正则表达式进行搜索并使用perl替换我想在JOB INPUT行和SQL OPEN行之间插入SQL连接语句。以下是输入的模式

JOB INPUT NULL
SQL OPEN CURSOR

JOB INPUT RANKEY
KEY1 = KEY2
SQL OPEN CURSOR

JOB INPUT RANKEY
KEY1 = KEY2
KEY3 = KEY3
SQL OPEN CURSOR

必须将其更改为以下

JOB INPUT NULL
SQL使用PAS-WD连接到数据库用户ID SQL OPEN CURSOR

JOB INPUT RANKEY
KEY1 = KEY2
SQL使用PAS-WD连接到数据库用户ID SQL OPEN CURSOR

JOB INPUT RANKEY
KEY1 = KEY2
KEY3 = KEY3
SQL使用PAS-WD连接到数据库用户ID SQL OPEN CURSOR

我使用了以下正则表达式

( s{^(\s*job\s+input.*\n?.*?)}{$1\n$sql_connect\n}im )

$ sql_connect的值为“SQL CONNECT TO DATABASE USER USER-ID using PAS-WD”

我得到以下结果

JOB INPUT NULL
SQL使用PAS-WD连接到数据库用户ID SQL OPEN CURSOR

JOB INPUT RANKEY
SQL使用PAS-WD连接到数据库用户ID   KEY1 = KEY2
SQL OPEN CURSOR

JOB INPUT RANKEY
SQL使用PAS-WD连接到数据库用户ID   KEY1 = KEY2
  KEY3 = KEY3
SQL OPEN CURSOR

我可以通过正则表达式来完成吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试以下方法:

s{^(\s*job\s+input.*?)^(\s*sql\s+open.*?\n)}{$1$sql_connect\n$2}imsg

这似乎对我有用。