Schrift
[thread]8115[/thread]

RegEx: Datum identifizieren



<< >> 7 Einträge, 1 Seite
pktm
 2006-06-28 15:28
#67675 #67675
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Ich habe da folgenden
Code: (dl )
1
2
3
4
5
6
7
8
9
10
my $string = qq~
Forscher haben am 12.05.2006, d. h. 12.5.2006 weitere Hinweise
dafür gefunden, dass Kohlendioxid ab dem 01/05/09 die
Erdatmosphäre stärker aufheizt als bisher angenommen.
Ein Bohrkern aus der Arktis, der 55 Millionen Jahre
altes Gestein enthält, d.h. etwas völlig unwesentliches,
brachte eine große - und insb. unangenehme - Überraschung(en).~;

my @w = ($string =~ m/\d\d?\.\d\d?\.\d\d\d\d|\d\d\?.\d\d?\.\d\d/g);
print Dumper( \@w );


Die RegEx durchsucht den Text auf Datumsangaben.
Es geht dabei nur um Daten der Form tt.mm.jjjj oder tt.mm.jj. Die anderen sind vorerst außen vor gelassen.

Ist es möglich, dass ich mir diese elende Oder-Verknüopfung sparen kann? Mit () geht es nicht (=> m/\d\d?\.\d\d?\.\d\d(\d\d)?), weil sonst nur das als Ergebnisse herauskommt, was in der Klammer steht (von Verschachtelungen der Klammern mal ganz zu schweigen).

Kann man irgendwie angeben, dass nach 2 oder 4 Zahlen gesucht wird? \d{2,4} findet leider auch dreistellige Zahlen.

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
renee
 2006-06-28 15:35
#67676 #67676
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Also so sollte es funktionieren:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl

use strict;
use warnings;

my $string = q~Forscher haben am 12.05.2006, d. h. 12.5.2006 weitere Hinweise
dafür gefunden, dass Kohlendioxid ab dem 01/05/09 die
Erdatmosphäre stärker aufheizt als bisher angenommen.
Ein Bohrkern aus der Arktis, der 55 Millionen Jahre
altes Gestein enthält, d.h. etwas völlig unwesentliches,
brachte eine große - und insb. unangenehme - Überraschung(en).~;

my @dates = $string =~ /((?:\d{1,2}\.){2}(?:\d{2}){1,2})/g;

print $_,"\n" for @dates;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Linuxer
 2006-06-28 15:40
#67677 #67677
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
2 oder 4 kannst Du schreiben als 2*1 oder 2*2:

Code: (dl )
(?:\d\d){1,2}


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl
# vim: set ts=4 sw=4 et sta:
use strict;
use warnings;

my @datum = qw( 12.01.2006 23.11.06 23.23.222 );


for ( @datum ) {
if ( m!\b\d\d?\.\d\d?\.(?:\d\d){1,2}\b! ) {
print "$_ : match\n";
}
else {
print "$_: no match\n";
}
}
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
pktm
 2006-06-28 16:15
#67678 #67678
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Was bedeutet denn das ?:?
http://www.intergastro-service.de (mein erstes CMS :) )
sid burn
 2006-06-28 16:59
#67679 #67679
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=pktm,28.June.2006, 14:15]Was bedeutet denn das ?:?[/quote]
(?: ... )

Damit gruppierst du etwas wie einfache ( ) jedoch wird der Inhalt nicht in einer Variablen $1,$2,... gespeichert.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
pktm
 2006-06-28 17:10
#67680 #67680
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ah, toll. Sowas habe ich gesucht.
http://www.intergastro-service.de (mein erstes CMS :) )
renee
 2006-06-28 21:09
#67681 #67681
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
So etwas steht z.B. in perlreref (ist sogar in Deutsch)...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 7 Einträge, 1 Seite



View all threads created 2006-06-28 15:28.