我有我認爲將是一個簡單的問題來解決,但我無法找到答案。Perl搜索並替換最後一個字符出現
如何找到並替換字符串中最後一次出現的字符?我有一個字符串:GE1/0/1,我希望它是:GE1/0:1 < - 這可以是可變長度,所以沒有子字符串請。
澄清: 我正在尋找替換最後/與:無論是之前或之後。
我有我認爲將是一個簡單的問題來解決,但我無法找到答案。Perl搜索並替換最後一個字符出現
如何找到並替換字符串中最後一次出現的字符?我有一個字符串: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不是我的語言:
$string =~ s!/(?=[^/]*$)!\:!g;
也許我有不明白的具有可變長度的問題,但我會做到以下幾點:
可以匹配你想用正則表達式是什麼:
(.+)/
所以,這個Perl腳本
my $text = 'GE1/0/1';
$text =~ s|(.+)/|$1:|;
print 'Result : '.$text;
將輸出:
Result : GE1/0:1
「+」量詞默認爲「貪婪」,它只會匹配最後一個斜槓字符。
希望這是你問的。
「字符串中的最後一次出現」稍微不明確。我看到它的方式,您可能意味:
"Foo: 123, yada: GE1/0/1, Bar: null"
意義的 「單詞」 GE1/0/1的最後出現,或者:
"GE1/0/1"
作爲一個完整的字符串。
在後一種情況下,這是一個相當簡單的問題,你只需要決定你在正則表達式中的具體含義。
$str =~ s{/(\d+)$}{:$1};
完全正常,假設最後一個字符只能是數字。
在前一種情況下,我不認爲你是指,但無論如何,我會包括你需要更加具體:
$str =~ s{(\byada:\s+\w+/\w+)/(\w+\b)}{$1:$2};
謝謝你,這完美地工作。 – shaneburgess