2017-09-25 1 views
0

matin tout, Je veux capturer la chaîne avant les deux points: puis comparer la chaîne après les deux points et supprimer les valeurs qui sont égales aux valeurs avant le côlon.Comment capturer la chaîne avant le symbole

Par exemple:

aaa:aaa-bbb-ccc 

Sortie:

aaa others:bbb,ccc 

mon code ci-dessous

$string = "aaa:aaa-bbb-ccc"; 
$first =~ /(:.*\)/; //get aaa before the colon 
$others =$string=~ s/$first//; remove the same values after colon 

Pouvez-vous s'il vous plaît me aider ?? Merci ..

+0

'(. * \)' Signifie ** après ** ** pas avant **. S'il vous plaît clarifier votre question. Puisque vous avez deux 'aaa'; c'est un peu déroutant. Et votre sortie est très différente de votre modèle. –

Répondre

0

Cela fonctionne:

use strict; 
use warnings; 

my $s='aaa:aaa-bbb-ccc'; 
if ($s=~/^([^:]+):/) { 
    my $first=$1; 
    $s=~s/\Q$1\E://; 
    print "$first others:" . join ',', grep { $_ ne $first } split '-', $s; 
} 
# aaa others:bbb,ccc 
+0

($ s = ~/^ ([^:] +): /) est-ce pour accéder à la chaîne avant le deux-points –

+0

@Azhar: Oui. Il capture tous les caractères de la main gauche du premier deux-points de la chaîne. – dawg

+0

@ysth: Merci! Les deux bonnes modifications – dawg