我正在尝试使用正则表达式从分号分隔的字符串中删除令牌。示例字符串如下所示:
Field1=Blah;Field2=Bluh;Field3=Dingdong;Uid=John;Pwd=secret;Field4=lalali
Field1=Blah;Field2=Bluh;Field3=Dingdong;Uid=John;Pwd=secret;Field4=lalali;
所以我想在单独的命令中删除“Uid”和“Pwd”标记,以免删除任何尾随标记(例如,Field4 应该保留在末尾)。
我目前的尝试是:
$mystring =~s /Uid=.+;//i;
产生
Field1=Blah;Field2=Bluh;Field3=Dingdong;Field4=lalali
这适用于第一行,但不适用于末尾有分号的第二行,它会产生
Field1=Blah;Field2=Bluh;Field3=Dingdong;
并错误地删除 Field4。我尝试了许多变体,例如
$mystring =~s /Uid=.+;?//i;
$mystring =~s /Uid=.+;+?//i;
没有成功。我意识到我需要告诉正则表达式只匹配第一个分号,但我不知道如何。
现在,为了不让我看起来完全愚蠢,我可以通过这样做来让它工作:
$mystring =~s /Uid=[^;]+;//i;
但我仍然想知道为什么我不能告诉表达式只匹配第一个分号......