2016-09-11 22 views
-2
$test="111222333345555"; 

同じ繰り返し桁の数字を 't'に置き換えるにはどうすればよいですか?正規表現を使用して置換えを実現する方法は?

つまり、正規表現を使用して"11t22t333t4555t"を取得する方法は?

+0

私は私がfixed.Sorry、 ' "333t3"'と ' "555トン"' – Faibbus

+0

@Faibbusああを持ってする方法を見つけることができません。.. – partida

答えて

2

続くその発生箇所が、最後の1、すべての続いた数字によってそれを置き換えるでしょう:

#!/usr/bin/perl 
use Modern::Perl; 

my $test = "11222333345555"; 
$test =~ s/((\d)\2*)\2/$1t/g; 
say $test; 

出力:

1t22t333t4555t 

説明:

(  : start group 1 
    ( : start group 2 
    \d : a digit 
)  : end group 2 
    \2* : backreference on group 2 (ie: same digit) 0 or more times 
)  : end group 1 
\2  : backreference on group 2 
0

"(\d)(\1+?)\1(?!\1)" [1]"\1\2t" [2]に置き換えます。

[1]では、あなたが自分自身(\1)が続き、何か((?!\1))に続いて自身で何度でも(\1+?を)続い桁(\d)を、一致します。

そして2つの以上の同じ連続した数字がある場合、交換したい場合は、"t"

関連する問題