Perl搜索和替换最后一个字符出现

9

我本以为这是一个容易解决的问题,但是我找不到答案。

如何查找并替换字符串中最后一个字符的出现位置?

我有一个字符串:GE1/0/1,我想让它变成:GE1/0:1 <- 这个字符串长度可变,所以请不要使用子字符串。

澄清:我想要将最后一个 / 替换为 : ,无论它前面或后面有什么。

4个回答

13
use strict;
use warnings;
my $a = 'GE1/0/1';
(my $b = $a) =~ s{(.*)/}{$1:}xms;
print "$b\n";

我使用贪婪模式的 .* 表达式。


8
也许我没有理解变量长度的问题,但我会按照以下方式处理:
您可以使用正则表达式来匹配所需内容:
(.+)/

因此,这个Perl脚本

my $text = 'GE1/0/1';
$text =~ s|(.+)/|$1:|;
print 'Result : '.$text;

输出结果:

Result : GE1/0:1

默认情况下,“+”量词是“贪婪”的,它只会匹配最后一个斜杠字符。
希望这就是你所要求的内容。

2

这个正则表达式会找到一个斜杠并向前查看,确保在它后面没有更多的斜杠。

原始正则表达式:

/(?=[^/]*$)

我认为代码应该是这样的,但Perl不是我的语言:
$string =~ s!/(?=[^/]*$)!\:!g;

1
“字符串中最后一次出现”的意思略显模糊。我认为你可以理解为以下两种情况之一:
"Foo: 123, yada: GE1/0/1, Bar: null"

意思是在“word” GE1/0/1 中找到最后一个出现的:
"GE1/0/1" 

作为完整字符串。
在后一种情况下,这是一个相当简单的问题,你只需要决定你的正则表达式可以有多具体。
$str =~ s{/(\d+)$}{:$1};

假设最后一个字符只能是数字,那么这是完全没问题的。

在前一种情况下,我不认为你指的是这个,但我还是会包括进来,你需要更加具体:

$str =~ s{(\byada:\s+\w+/\w+)/(\w+\b)}{$1:$2};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接