Hulp met regex
Momenteel heb ik enkele *.txt-bestanden, met daarin opgeslagen smsjes. Inmiddels is het me gelukt om de smsjes apart in een array te krijgen, klaar om verder bewerkt te worden. Het huidige formaat laat het echter niet toe om het zo in een database te stoppen. Daarom wil ik met behulp van regex de sleutel verder strippen in een telefoonnummer van de afzender, de datum en tijd en het daadwerkelijke bericht. Het formaat nu:
0031612345678 5-07-2007 23:01:25 He, ik ben een smsje! :)
Het eerste gedeelte (0031612345678) bestaat uit het telefoonnummer en kan beginnen met een + (voor de landcode) of met een getal. Het kan ook een vrij kort nummer zijn, zoals 4040 (bv. van infodiensten), en maximaal 13 cijfers lang zijn.
Het tweede gedeelte (5-9-2007 23:01:25) bevat de datum. Niets bijzonders verder, met dien verstande dat getallen onder de 10 niet met een 0 beginnen (in het bovenstaand voorbeeld wordt september bijvoorbeeld aangegeven met 9, in plaats van met 09).
Het laatste gedeelte bevat het daadwerkelijke smsje, en loopt tot het einde van de sleutel.
Het lijkt mij het makkelijkste om eerst te splitten met preg_split op de afzender, vervolgens op de datum en wat je overhoudt is het smsje.
Voor de afzender had ik in ieder geval bedacht: /^((\+|([0-9]){0,13}))$/
Maar dat is hem kennelijk nog niet helemaal ^_^ Wie kan mij helpen met een werkende reguliere expressie op te stellen? Alvast bedankt! :)
Edit:
Maar wacht, er is meer! Ik zit net een beetje verder te kijken in die *.txt-bestanden, en zie dat het formaat ook anders kan zijn. Helaas.
Andere formaten:
NAAM_AFZENDER (1000) 24-6-2007 13:21:33 Ik ben een smsje van de afzender met telefoonnummer 1000.
Met andere woorden, de naam van de afzender kan ook weergegeven worden als afzender, met daarachter - tussen haakjes - het telefoonnummer. In mijn text-editor KWrite staat ook een puntje achter de afzender en de datum, die hier niet gekopiƫerd wordt. Dat is waarschijnlijk een tab. Wellicht kan daar ook op gesplit worden, dat ga ik eerst even onderzoeken.
0031612345678 5-07-2007 23:01:25 He, ik ben een smsje! :)
Het eerste gedeelte (0031612345678) bestaat uit het telefoonnummer en kan beginnen met een + (voor de landcode) of met een getal. Het kan ook een vrij kort nummer zijn, zoals 4040 (bv. van infodiensten), en maximaal 13 cijfers lang zijn.
Het tweede gedeelte (5-9-2007 23:01:25) bevat de datum. Niets bijzonders verder, met dien verstande dat getallen onder de 10 niet met een 0 beginnen (in het bovenstaand voorbeeld wordt september bijvoorbeeld aangegeven met 9, in plaats van met 09).
Het laatste gedeelte bevat het daadwerkelijke smsje, en loopt tot het einde van de sleutel.
Het lijkt mij het makkelijkste om eerst te splitten met preg_split op de afzender, vervolgens op de datum en wat je overhoudt is het smsje.
Voor de afzender had ik in ieder geval bedacht: /^((\+|([0-9]){0,13}))$/
Maar dat is hem kennelijk nog niet helemaal ^_^ Wie kan mij helpen met een werkende reguliere expressie op te stellen? Alvast bedankt! :)
Edit:
Maar wacht, er is meer! Ik zit net een beetje verder te kijken in die *.txt-bestanden, en zie dat het formaat ook anders kan zijn. Helaas.
Andere formaten:
NAAM_AFZENDER (1000) 24-6-2007 13:21:33 Ik ben een smsje van de afzender met telefoonnummer 1000.
Met andere woorden, de naam van de afzender kan ook weergegeven worden als afzender, met daarachter - tussen haakjes - het telefoonnummer. In mijn text-editor KWrite staat ook een puntje achter de afzender en de datum, die hier niet gekopiƫerd wordt. Dat is waarschijnlijk een tab. Wellicht kan daar ook op gesplit worden, dat ga ik eerst even onderzoeken.
Edit:
Op die tabs kan inderdaad gesplit worden, dus dan houd ik een array over met:
Afzender => NAAM_AFZENDER (1000)
Datum => 24-6-2007 13:21:33
Bericht => Ik ben een smsje van de afzender met telefoonnummer 1000.
In dat geval moet ik alleen nog de afzender en het nummer wat erachter staat splitsen om het te kunnen gebruiken in relatie tot de database, maar daar kan ik zelf wel uitkomen denk ik :)
Afzender => NAAM_AFZENDER (1000)
Datum => 24-6-2007 13:21:33
Bericht => Ik ben een smsje van de afzender met telefoonnummer 1000.
In dat geval moet ik alleen nog de afzender en het nummer wat erachter staat splitsen om het te kunnen gebruiken in relatie tot de database, maar daar kan ik zelf wel uitkomen denk ik :)
Gewijzigd op 01/01/1970 01:00:00 door Kasper Isgek
Gesponsorde koppelingen:
Kasper schreef op 05.09.2007 23:06:
.. wordt september bijvoorbeeld aangegeven met 7, in plaats van met 07...
Geen wonder dat het niet lukte 7 is Juli :)
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
Quote:
Hehe, scherp opgemerkt :P Ik heb het aangepast, maar het werkt nog steeds niet >:)Geen wonder dat het niet lukte 7 is Juli :)
Waar loop je nu vast?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
$GLOBALS[ 'test' ] = '0031612345678 5-07-2007 23:01:25 He, ik ben een smsje! :)';
preg_match( '/((.*) \((\d+)\)|(\d+)) ([^\s]+) ([^\s]+) (.*)/i' , $GLOBALS[ 'test' ] , $res ); print_r( $res );
Array
(
[0] => 0031612345678 5-07-2007 23:01:25 He, ik ben een smsje! :)
[1] => 0031612345678
[2] =>
[3] =>
[4] => 0031612345678
[5] => 5-07-2007
[6] => 23:01:25
[7] => He, ik ben een smsje! :)
)
hmm
$GLOBALS[ 'test' ] = 'NAAM_AFZENDER (1000) 24-6-2007 13:21:33 Ik ben een smsje van de afzender met telefoonnummer 1000.';
preg_match( '/((.*) \((\d+)\)|(\d+)) ([^\s]+) ([^\s]+) (.*)/i' , $GLOBALS[ 'test' ] , $res ); print_r( $res );
Array
(
[0] => NAAM_AFZENDER (1000) 24-6-2007 13:21:33 Ik ben een smsje van de afzender met telefoonnummer 1000.
[1] => NAAM_AFZENDER (1000)
[2] => NAAM_AFZENDER
[3] => 1000
[4] =>
[5] => 24-6-2007
[6] => 13:21:33
[7] => Ik ben een smsje van de afzender met telefoonnummer 1000.
)
?>
$GLOBALS[ 'test' ] = '0031612345678 5-07-2007 23:01:25 He, ik ben een smsje! :)';
preg_match( '/((.*) \((\d+)\)|(\d+)) ([^\s]+) ([^\s]+) (.*)/i' , $GLOBALS[ 'test' ] , $res ); print_r( $res );
Array
(
[0] => 0031612345678 5-07-2007 23:01:25 He, ik ben een smsje! :)
[1] => 0031612345678
[2] =>
[3] =>
[4] => 0031612345678
[5] => 5-07-2007
[6] => 23:01:25
[7] => He, ik ben een smsje! :)
)
hmm
$GLOBALS[ 'test' ] = 'NAAM_AFZENDER (1000) 24-6-2007 13:21:33 Ik ben een smsje van de afzender met telefoonnummer 1000.';
preg_match( '/((.*) \((\d+)\)|(\d+)) ([^\s]+) ([^\s]+) (.*)/i' , $GLOBALS[ 'test' ] , $res ); print_r( $res );
Array
(
[0] => NAAM_AFZENDER (1000) 24-6-2007 13:21:33 Ik ben een smsje van de afzender met telefoonnummer 1000.
[1] => NAAM_AFZENDER (1000)
[2] => NAAM_AFZENDER
[3] => 1000
[4] =>
[5] => 24-6-2007
[6] => 13:21:33
[7] => Ik ben een smsje van de afzender met telefoonnummer 1000.
)
?>
Gewijzigd op 01/01/1970 01:00:00 door Peter Dorn
Bedankt voor je tijd en moeite Peter. Hij werkt nog niet helemaal lekker (o.a. doordat er in de berichten zelf ook getallen voorkomen), maar ik zal er wel uitkomen zo denk ik.



