我认为这是一个容易解决的问题,但我无法找到答案。
如何找到并替换字符串中最后一个字符?
我有一个字符串:GE1 / 0/1,我希望它是:GE1 / 0:1< - 这可以是可变长度,所以请不要有子串。
澄清: 无论是之前还是之后,我都希望用最后一个/替换它。
答案 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};