Perl搜索并替换最后一个字符

时间:2011-06-30 13:05:02

标签: regex perl replace

我认为这是一个容易解决的问题,但我无法找到答案。

如何找到并替换字符串中最后一个字符?

我有一个字符串:GE1 / 0/1,我希望它是:GE1 / 0:1< - 这可以是可变长度,所以请不要有子串。

澄清: 无论是之前还是之后,我都希望用最后一个/替换它。

4 个答案:

答案 0 :(得分:11)

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

我使用.*

的贪婪行为

答案 1 :(得分:5)

也许我不了解可变长度的问题,但我会做以下事情:

您可以将所需内容与正则表达式匹配:

(.+)/

所以,这个Perl脚本

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

将输出:

Result : GE1/0:1

'+'量词默认为'贪婪',它只匹配最后一个斜杠字符。

希望这就是你所要求的。

答案 2 :(得分:2)

这会找到一个斜线并向前看以确保没有更多的斜线超过它。:

原始正则表达式:

/(?=[^/]*$)

我认为代码看起来像这样,但perl不是我的语言:

$string =~ s!/(?=[^/]*$)!\:!g;

答案 3 :(得分: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};