2011-11-21 15 views
9

संग्रहित करना निम्न प्रोग्राम एक स्ट्रिंग को पुनर्व्यवस्थित करना है। लाइन 8 के लिए, मैं रेगेक्स के परिणामों को एक नए वैरिएबल $ न्यूडेट में स्टोर करने की कोशिश कर रहा हूं, लेकिन जब लाइन 9 में $ newdate मुद्रित होता है, तो यह केवल 1 प्रदर्शित करता है। मैं अपना कोड कैसे बदल सकता हूं ताकि $ newdate स्टोर करे Regex ऑपरेशन से $ तारीख मूल्य?रेगेक्स परिणाम को एक नए चर में

1 #!/usr/bin/perl 
2 
3 # This program changes the date format from mm/dd/yyyy to yyyy,mm,dd 
4 
5 $date = '21/11/2011'; 
6 print "Current: $date\n"; 
7 
8 $newdate = $date =~ s/(..)\/(..)\/(....)/$3,$2,$1/; 
9 print "New: $newdate\n"; 

उत्तर

14

आप भी इस तरह यह कर सकता है:

my $date = '21/11/2011'; 
print "Current: $date\n"; 
my $newdate; 
($newdate = $date) =~ s/(..)\/(..)\/(....)/$3,$2,$1/; 
print $newdate; 
+0

धन्यवाद - यही वह था जो मैं बाद में था। – kurotsuki

+0

@ कुरोटुकीकी आपका स्वागत है :) – FailedDev

4

=~ ऑपरेटर जब प्रतिस्थापन कर रही परिवर्तन की संख्या वापस आ जाएगी, और जब तक आप इसे विश्व स्तर पर कर रहे हैं, यह हमेशा वापस आ जाएगी 1 या 0. इसके अतिरिक्त, प्रतिस्थापन जगह में किया जाता है, इसलिए यदि आपके लक्ष्य $date को संशोधित नहीं करना है, आप प्रतिस्थापित नहीं करना चाहते हैं।

प्रयास करें:

$date =~ m/(..)\/(..)\/(....)/; 
$newdate = "$3,$2,$1"; 
+0

स्पष्टीकरण के लिए धन्यवाद। – kurotsuki

1

TIMTOWTDI की भावना में:

my $date = '21/11/2011'; 

my $newdate = join ",", reverse split m#/#, $date; 

यह सिर्फ इसलिए कि आप चाहते हैं काम करने के लिए होता है संख्याओं पर विपरीत क्रम। तुम भी ऐसा कर सकता है:

my $newdate = join ",", (split m#/#, $date)[2,1,0]; 

फिर भी एक और तरीका है:

my $newdate = join ",", reverse ($date =~ /(\d+)/g); 

इसके अलावा: Why use strict and warnings?

10

पर्ल 5.13.2 के बाद से, गैर विनाशकारी प्रतिस्थापन s///r संशोधक के माध्यम से निर्दिष्ट किया जा सकता है ताकि एक पोस्ट-प्रतिस्थापन स्ट्रिंग की प्रति मैचों की संख्या के बजाय असाइन की गई है।

(my $new_date = $date) =~ s<(..)/(..)/(....)><$3,$2,$1>; # Pre-5.13.2 

    my $new_date = $date =~ s<(..)/(..)/(....)><$3,$2,$1>r; # Post-5.13.2 

perldoc perl5132delta से::

गैर विनाशकारी प्रतिस्थापन

यह भी संशोधित किए जाने से मूल स्ट्रिंग, जिसका अर्थ है दो कार्य एक ही व्यवहार से बचाता है प्रतिस्थापन ऑपरेटर अब /r विकल्प का समर्थन करता है जो इनपुट चर की प्रतिलिपि बनाता है, बाहर करता है प्रतिलिपि पर प्रतिस्थापन और परिणाम परिणाम देता है। मूल अवशेष unmodified।

my $old = 'cat'; 
my $new = $old =~ s/cat/dog/r; 
# $old is 'cat' and $new is 'dog' 
संबंधित मुद्दे