preg match
ik ben een ondertitel vertaal script aan het maken, maar iets wil niet lukken:
ik wil contoleren of een lijn zoals deze is:
00:00:12,108 --> 00:00:14,793
dmv:
maar dat geeft
Fatal error: Can't use function return value in write context in /home/a2238742/public_html/test/trans.php on line 8(r2 hier)
ik wil contoleren of een lijn zoals deze is:
00:00:12,108 --> 00:00:14,793
dmv:
Code (php)
maar dat geeft
Fatal error: Can't use function return value in write context in /home/a2238742/public_html/test/trans.php on line 8(r2 hier)
empty.
Je regex is overigs best wel heel erg ruim, hij klopt niet eens. En dit had je zelf toch ook kunnen vinden?
Je regex is overigs best wel heel erg ruim, hij klopt niet eens. En dit had je zelf toch ook kunnen vinden?
Je gebruikt de functie verkeerd:
$matches[0] is dan 00:00:12,108
$matches[1] is dan 00:00:14,793
Maar wat wil je precies doen?
$matches[0] is dan 00:00:12,108
$matches[1] is dan 00:00:14,793
Maar wat wil je precies doen?
Bas:
Je gebruikt de functie verkeerd:
$matches[0] is dan 00:00:12,108
$matches[1] is dan 00:00:14,793
Maar wat wil je precies doen?
$matches[0] is dan 00:00:12,108
$matches[1] is dan 00:00:14,793
Maar wat wil je precies doen?
Kijk eens op php.net: preg_match.
php.net:
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags [, int $offset ]]] )
Return Values
preg_match() returns the number of times pattern matches. That will be either 0 times (no match) or 1 time because preg_match() will stop searching after the first match. preg_match_all() on the contrary will continue until it reaches the end of subject. preg_match() returns FALSE if an error occurred.
Return Values
preg_match() returns the number of times pattern matches. That will be either 0 times (no match) or 1 time because preg_match() will stop searching after the first match. preg_match_all() on the contrary will continue until it reaches the end of subject. preg_match() returns FALSE if an error occurred.
Hij gebruikt de functie niet verkeerd. Als je alleen maar wilt kijken of een string klopt volgens de regex hoef je dus geen matches op te geven.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
een ondertitel translate script maken.
geeft
Warning: preg_match() [function.preg-match]: Unknown modifier '-' in /home/a2238742/public_html/test/trans.php on line 4
Ja, je regex is verkeerd.
Als je iets wilt gebruiken zal je het eerst moeten leren.
Als je niet weet hoe je moet zwemmen, dan kan je ook niet zwemmen.
Eerst leren dus.
Dat stukje code hierboven slaat ook nergens op.
Als je iets wilt gebruiken zal je het eerst moeten leren.
Als je niet weet hoe je moet zwemmen, dan kan je ook niet zwemmen.
Eerst leren dus.
Dat stukje code hierboven slaat ook nergens op.
Hoe precies wil je bepalen dat die regel aan dat formaat voldoet? Bijvoorbeeld heel strikt:
.
^ is het begin van een lijn
$ het einde van een lijn
\d een getal van 0 tot 9
{2} twee maal het ding ervoor (\d, getal tussen 0 en 9) matchen
\s spatie of tab
+ ding wat ervoor staat (spatie, tab) één of meer keer matchen
Combineer dat met preg_match:
Maar de vraag is nog steeds: wat wil je precies?
.
^ is het begin van een lijn
$ het einde van een lijn
\d een getal van 0 tot 9
{2} twee maal het ding ervoor (\d, getal tussen 0 en 9) matchen
\s spatie of tab
+ ding wat ervoor staat (spatie, tab) één of meer keer matchen
Combineer dat met preg_match:
Code (php)
Maar de vraag is nog steeds: wat wil je precies?
Gewijzigd op 24/05/2010 16:23:56 door Jelmer -
Jelmer, voorpieper :P Had net het volgende geschreven:
Jouw voorbeeld is qua file-handling wel uitgebreider :)
edit: Wel weer wat geleerd, dacht dat {} niet zonder een groep of range ervoor kon, blijkbaar wel :)
edit2: Nog een wijziging, klopte iets niet in mijn groeperingen
Code (php)
Jouw voorbeeld is qua file-handling wel uitgebreider :)
edit: Wel weer wat geleerd, dacht dat {} niet zonder een groep of range ervoor kon, blijkbaar wel :)
edit2: Nog een wijziging, klopte iets niet in mijn groeperingen
Gewijzigd op 24/05/2010 16:39:23 door Willem Jan Z
of:
}elseif(substr($lines,13,3) == "-->"){
}elseif(substr($lines,13,3) == "-->"){
Martin:
of:
}elseif(substr($lines,13,3) == "-->"){
}elseif(substr($lines,13,3) == "-->"){
Waarvoor zou je dat doen als je toch al met regular expressions bezig bent?
Als je 100% weet dat --> altijd op dezelfde plek staat kan dat, maar je controleert nu totaal niet of er tijden staan.
Als ik me niet vergis is strpos stuk sneller dan substr e.a.
Als ik me niet vergis is strpos stuk sneller dan substr e.a.
Natuurlijk niet de m-modifier vergeten als je per regel wil matchen met ^ en $.
Richard:
Natuurlijk niet de m-modifier vergeten als je per regel wil matchen met ^ en $.
niet noodzakelijk, aangezien ik er maar één regel per keer in gooi.
Martin:
of:
}elseif(substr($lines,13,3) == "-->"){
}elseif(substr($lines,13,3) == "-->"){
Gevaar hiervan is dat het ook matcht wanneer --> in de subtitels zelf staat. Maar dat argument kan je ook gebruiken tegen de preg_match oplossing. Eigenlijk moet je gewoon tellen wat je nu op de regel verwacht. Begin van bestand: subtitel-index. Vorige regel subtitelindex? Dan moet dit de tijd zijn. Vorige regel de tijd? Dan moet dit de subtitel zelf zijn. Witte regel? dan komt hierna weer een index.
ik heb het nu zo:
http://test.seriez.co.cc/trans.php?begin=0&end=2500
http://test.seriez.co.cc/trans.php?begin=0&end=2500
Jelmer:
niet noodzakelijk, aangezien ik er maar één regel per keer in gooi.
Richard:
Natuurlijk niet de m-modifier vergeten als je per regel wil matchen met ^ en $.
niet noodzakelijk, aangezien ik er maar één regel per keer in gooi.
Nou dan, wat is het nut van een regel per keer? Niks, noppes, nada, het is alleen inefficiënt.




