我本以为这是一个容易解决的问题,但是我找不到答案。
如何查找并替换字符串中最后一个字符的出现位置?
我有一个字符串:GE1/0/1,我想让它变成:GE1/0:1 <- 这个字符串长度可变,所以请不要使用子字符串。
澄清:我想要将最后一个 / 替换为 : ,无论它前面或后面有什么。
use strict;
use warnings;
my $a = 'GE1/0/1';
(my $b = $a) =~ s{(.*)/}{$1:}xms;
print "$b\n";
我使用贪婪模式的 .*
表达式。
(.+)/
因此,这个Perl脚本
my $text = 'GE1/0/1';
$text =~ s|(.+)/|$1:|;
print 'Result : '.$text;
输出结果:
Result : GE1/0:1
这个正则表达式会找到一个斜杠并向前查看,确保在它后面没有更多的斜杠。
原始正则表达式:
/(?=[^/]*$)
$string =~ s!/(?=[^/]*$)!\:!g;
"Foo: 123, yada: GE1/0/1, Bar: null"
"GE1/0/1"
$str =~ s{/(\d+)$}{:$1};
假设最后一个字符只能是数字,那么这是完全没问题的。
在前一种情况下,我不认为你指的是这个,但我还是会包括进来,你需要更加具体:
$str =~ s{(\byada:\s+\w+/\w+)/(\w+\b)}{$1:$2};