Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 应用程序中使用perl的正则表达式替换_Regex_Perl - Fatal编程技术网

Regex 应用程序中使用perl的正则表达式替换

Regex 应用程序中使用perl的正则表达式替换,regex,perl,Regex,Perl,我必须做一个正则表达式替换,我正在使用perl进行替换;看起来很像这个 $ABC=~s/APP_*.?\u LOG_*.\u*./$1/ 打印ABC=$ABC\n 其中,$ABC可以在替换前后采用以下格式: APP_184_PRD_LOG_O2_2M -> O2 APP_184_PRD_CFC_O2_6D -> O2 APP_046_STG_CFC_BCK_4W_1 -> BCK APP_050_STG_LOG_OSS_8M_2 -> OSS APP_050_STG_LO

我必须做一个正则表达式替换,我正在使用perl进行替换;看起来很像这个

$ABC=~s/APP_*.?\u LOG_*.\u*./$1/

打印ABC=$ABC\n

其中,$ABC可以在替换前后采用以下格式:

APP_184_PRD_LOG_O2_2M -> O2
APP_184_PRD_CFC_O2_6D -> O2
APP_046_STG_CFC_BCK_4W_1 -> BCK
APP_050_STG_LOG_OSS_8M_2 -> OSS
APP_050_STG_LOG_SAM_SOX_2M -> SAM_SOX
APP_050_STG_CFC_SAM_FOR_6M_3 -> SAM_FOR

Rules:-
1st variable is always APP
4th variable can be LOG or CFC
We are concerned with variable no.5 or 6(in some cases)
If the 6th variable has Number+(W/D/M), then 6th & 7th variable to be removed
替换必须是单行程序应用限制。

您可以使用吗?![^\d+].*?,即:

演示


试试看,你可以使用消极的前瞻或积极的前瞻

消极展望

~s/APP.+??:LOG | CFC.+?![^\d]。+/$1/

积极展望未来

~s/APP.+??:LOG | CFC.+?=\d.+/$1/g


我想这也可以做到:

s/^APP_[^_]{3}_[^_]{3}_(?:LOG|CFC)_(.+)_\d[WMD](?:_\d+)?$/$1/;
输出:

$ perl -le 'for (@ARGV) { s/^APP_[^_]{3}_[^_]{3}_(?:LOG|CFC)_(.+)_\d[WMD](?:_\d+)?$/$1/; print }' APP_184_PRD_LOG_O2_2M APP_184_PRD_CFC_O2_6D APP_046_STG_CFC_BCK_4W_1 APP_050_STG_LOG_OSS_8M_2 APP_050_STG_LOG_SAM_SOX_2M APP_050_STG_CFC_SAM_FOR_6M_3
O2
O2
BCK
OSS
SAM_SOX
SAM_FOR
$

我在你的帖子里没有看到任何问题。@Hunter,对不起……如果问题不够清楚……看起来它符合我的要求。。。如果我的回答对你有帮助,请考虑投票1▲ 并通过单击复选标记将其作为正确答案接受✔ 在投票箭头的中间,TKS!我已经将您的回复标记为answer,在正常的perl命令中使用它时效果很好,但不知何故,regex-the-negative-lookback在应用程序中无法正常工作。所以,我也在检查其他回复。你可能想检查一下主题是否与你想象的一样。这是在应用程序和perl中运行良好的正则表达式负回溯。我不能使用正向回溯,因为我不能将/g放在末尾。谢谢感谢您的回复,由于字符限制{3},正则表达式不够灵活,最后,如果我添加2个数字,它将再次失败。
O2
O2
BCK
OSS
SAM_SOX
SAM_FOR
s/^APP_[^_]{3}_[^_]{3}_(?:LOG|CFC)_(.+)_\d[WMD](?:_\d+)?$/$1/;
$ perl -le 'for (@ARGV) { s/^APP_[^_]{3}_[^_]{3}_(?:LOG|CFC)_(.+)_\d[WMD](?:_\d+)?$/$1/; print }' APP_184_PRD_LOG_O2_2M APP_184_PRD_CFC_O2_6D APP_046_STG_CFC_BCK_4W_1 APP_050_STG_LOG_OSS_8M_2 APP_050_STG_LOG_SAM_SOX_2M APP_050_STG_CFC_SAM_FOR_6M_3
O2
O2
BCK
OSS
SAM_SOX
SAM_FOR
$