perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 25
Click for quality!




11.02.2012 / 07:58

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragRegex Datum
Seitenanfang
Hallo,
ich habe folgendes Problem. Wenn ich in einem Text alle daten die im Format tt/.-mm/.-jjj suchen finde ich es zwar mit diesem Code aber der ganze zeile wird zurueckgegeben. Wenn ich es dann mit /^ inhalt$/. finde Stellen die nur das Datum enthalten aber nicht Stellen wo etwas dahinter steht. Was mache ich falsch.
Ich will nur in einem Text jedes Datum in so einem Format extrahieren.
Vielen Dank

#!/usr/local/bin/perl -w

use strict;
use warnings;

my $file = 'RTE2_dev.txt'; # Filename zuweisen
open(FILE, $file); # File öffnen

while(<FILE>){

my $match=$_;
my @result;

(@result=$match =~ /\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}/);

#(@result=$match =~ /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/);

foreach(@result){
print "$match\n";
#print "$_\n";

}

}

Datum: 20.01.2009-10:45

Beitragre: Regex Datum
Seitenanfang
Meinst Du es so?


#!/usr/local/bin/perl -w

use strict;
use warnings;

my $file = 'RTE2_dev.txt'; # Filename zuweisen
open(FILE, $file); # File öffnen

while(my $match = <FILE>){

$match =~ /(\d{1,2}(\-|\/|\.)\d{1,2}\2\d{4})/ ;
print "$1\n" if $1;

}

Datum: 20.01.2009-13:28

Beitragre: Regex Datum
Seitenanfang
Da ist ein kleiner Fehler drin: Selbst wenn eine Zeile kein solches Datum enthält, wird ein Datum ausgegeben - wenn vorher eins gefunden wird.

Das ist ist ein vereinfachtes Beispiel:

#!/usr/bin/perl

use strict;
use warnings;

my $line = 'test';
$line =~ /(es)/;

while( $line = <DATA> ){
$line =~ /(es)/;
print $1 if $1;
}

__DATA__
1
2

Wenn der Reguläre Ausdruck nicht matcht, werden die Variablen $1,$2,... nicht auf undef gesetzt, sondern behalten den Wert vom letzten Regulären Ausdruck, der gematcht hat.

Deshalb sollte es so gemacht werden:

if( $match =~ /(\d{1,2}(\-|\/|\.)\d{1,2}\2\d{4})/ ){
print "$1\n";
}

oder damit es besser lesbar wird

if( my ($date) = $match =~ /(\d{1,2}(\-|\/|\.)\d{1,2}\2\d{4})/ ){
print "$date\n";
}

Jetzt muss der OP nur noch wissen, ob auch mehrere Datumsangaben in einer Zeile vorkommen können. Dann muss das etwas angepasst werden.

Datum: 20.01.2009-14:40

-






-
-