我想用perl将字符串中不匹配的单词替换为none
$variable = "dx_app1_admin-101-102-prod;dx_app1_read-101-102-prod;dx_app2_admin-101-102-prod;dx_app2_admin-101-102-read;dx_app3_admin-101-102-prod;dx_app3_read-101-102-prod;";
$variable =~ s/?!(dx_app1_admin-101-102-prod;|dx_app1_read-101-102-prod;)//g;
print $variable;
预期输出:
dx_app1_admin-101-102-prod;dx_app1_read-101-102-prod;
4条答案
按热度按时间8qgya5xd1#
一种方法:
输出
eeq64g8w2#
我不会用正则表达式。
3mpgtkmj3#
您可以替换负先行匹配后的所有单词字符:
或者,只使用分号作为分隔符(而不是单词边界):
gwo2fgha4#
你可以使用SKIP FAIL来匹配你不想匹配的内容,然后匹配你想匹配的内容并替换为一个空字符串:
说明
\bdx_app1_(?:read|admin)-101-102-prod;
匹配前面带有字边界的dx_app1_admin-101-102-prod;
或dx_app1_read-101-102-prod;
,以防止部分字匹配(*SKIP)(*FAIL)
跳过比赛|
或[^\s;]+;
匹配1+除;
以外的字符或后跟匹配;
的空格字符看一个regex demo和一个perl演示。
产出