Toon posts:

Per + hh:mm:ss regex

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hello iedereen,

Ik probeer uit volgende lijn een hh:mm:ss tijdsformaat te halen:

"","15345345453","33154543","from-sip","""10391019"" <10391019>","SIP/1019-b687f508","Zap/32-1","Hangup","","2007-03-10 03:53:00","2007-03-10 03:53:27","2007-03-10 03:53:31",31,4,"ANSWERED","DOCUMENTATION"


Dit doe ik met volgende eenvoudige regex:

code: regex
1
2
3
4
5
if ($input[0] =~ /(\d\d):(\d\d):(\d\d)/) {    # match hh:mm:ss format
    $hours = $1;
    $minutes = $2;
    $seconds = $3;
    }


Vervolgens kan ik de gegevens via $1,$2 en $3 opvragen.
Het probleem is nu, zoals je kan zien, dat er 3x een tijdsaanduiding staat. De vraag is even simpel: hoe kom ik aan de overige 2?


Kan iemand aub de titel aanpassen naar [PERL] hh:mm:ss regex

[ Voor 5% gewijzigd door Verwijderd op 30-05-2007 12:12 ]


  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 18:53
Dat kan met while ipv if

Verwijderd

Regex is alles behalve heilig. Pak problemen stapsgewijs aan ipv alles in 1 keer met regex te doen. Het is een csv formaat. Dus split eerst eens op de values... :)

Verwijderd

Topicstarter
Verwijderd schreef op woensdag 30 mei 2007 @ 12:20:
Regex is alles behalve heilig. Pak problemen stapsgewijs aan ipv alles in 1 keer met regex te doen. Het is een csv formaat. Dus split eerst eens op de values... :)
Verspil je dan eig. niet te veel array? Maw, geef ik niet te veel toe op vlak van efficiëntie?


edit: al moet ik toegeven dat het veel makkelijker wordt :)

[ Voor 7% gewijzigd door Verwijderd op 30-05-2007 12:30 ]


  • superduper
  • Registratie: Juli 2001
  • Laatst online: 16:34

superduper

Z3_3.0 Woeiiii

Dat lijkt me wel het beste, maar je moet wel je verschillende hits opslaan in een array of hash voordat je ze bij de volgende hit weer overschrijft.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-11 15:10

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op woensdag 30 mei 2007 @ 12:27:
[...]


Verspil je dan eig. niet te veel array? Maw, geef ik niet te veel toe op vlak van efficiëntie?


edit: al moet ik toegeven dat het veel makkelijker wordt :)
Denk je dat een regexp zo efficient is dan? Splitten en zo de drie tijden eruit vissen stelt echt niks voor. Efficient zat.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 21-11 19:09

TrailBlazer

Karnemelk FTW

code:
1
2
3
4
5
6
7
8
while (<>) {
chomp;
@fields=split(/\,/,$_);
($time1)=($fields[8]=~/\".*\s(.*)\"/);
($time2)=($fields[9]=~/\".*\s(.*)\"/);
($time3)=($fields[10]=~/\".*\s(.*)\"/);
rest van de bewerkingen met de 3 tijden
}

dit zou moeten doen wat je wil denk ik. Ik heb de velden niet geteld dat mag je zelf uitzoeken.
Je splitst de regel eerst op de comma in verschillende velden. Vervolgens haal je uit de relevante velden de tijdsnotatie dmv alles achter de spatie is de tijd. Het kan nog iets efficienter door geen extra time variabelen aan te maken en direct in de array te gaan klussen met een regex. Ik kan me echter niet voorstellen dat je je daar druk om moet maken.

[ Voor 55% gewijzigd door TrailBlazer op 30-05-2007 13:03 ]


  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

code:
1
@tijden = ($input[0] =~ m/(\d\d:\d\d:\d\d)/g);


let op de /g modifier.

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 21-11 19:09

TrailBlazer

Karnemelk FTW

MUBA schreef op woensdag 30 mei 2007 @ 20:39:
code:
1
@tijden = ($input[0] =~ m/(\d\d:\d\d:\d\d)/g);


let op de /g modifier.
deze regex is ook nog steeds ranzig. Als je het mooi doet kan het ook zo denk ik.
code:
1
/((\d{2}|:){5})/

Beetje jammer dat de TS een beetje de neiging heeft zich niet meer in zijn eigen topic te vertonen. Ook zijn Posthistory is een beetje eenzijdig :(

Verwijderd

Topicstarter
Ik wou nog even iedereen bedanken voor zijn input. Ik heb het script intussen netjes afgewerkt. In mijn zoektocht om regexen te testen ben ik dit handig programmatje, dat zeker de moeite is, tegen het lijf gelopen: http://weitz.de/regex-coach/
Pagina: 1