Archief - PHP: Regular expression voor cue-sheet

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

DeFlup

Legacy Member
ik ben voor de moment dus bezig met het ontwerpen van een systeem voor een jeugdhuis om al hun albums bij te houden en doorzoekbaar te maken. Normaal gezien zouden ze dan per album al die tracks moeten ingeven, ik wou dit dus oplossen door de mogelijkheid te geven een CUE file in te lezen. Maar daar moet ik dan dus een regex voor schrijven.

Heb al verschillende dingen getest maar wil niet werken

om even een voorbeeld te geven:
TRACK 01 AUDIO
TITLE "Artiest 1 - Liedje 1"
INDEX 01 00:00:00
TRACK 02 AUDIO
TITLE "Liedje 2"
PERFORMER "Artiest 2"
INDEX 01 04:25:51

zoals je ziet kan een cue file verschillen van structuur, wel of geen performer etc, dus checken op title en performer alleen gaat al niet.

ik ben ook wat problemen tegen gekomen met de enter tekens, dus die had ik voorlopig verwijderd en alles achter mekaar gezet, en dan kwam ik tot volgende regex:
PHP:
preg_match_all("'TRACK ([0-9]{1,2}) AUDIO (([A-Z]+) \"([^\"]*)\")*.*'", $text, $formattext);
mijn redenering was dus als volgt:
[A-Z]+ zou dus staan voor TITLE, PERFORMER, .....

\"[^\"]\" zou dan dus de info per title, performer moeten zijn (mag vanalles zijn behalve een "

en deze 2 worden dan x aantal keer herhaald.

Maar blijkbaar is mijn redenering verkeerd, want het werkt niet.
Ziet er iemand wat ik fout doe?

DeFlup

Legacy Member
heb de oplossing al gevonden. Zal ze hier effe zetten voor zij die er in geïnteresseerd zijn:

PHP:
preg_match_all("'TRACK [0-9]{2} AUDIO[\r\n](((?!INDEX).)*[\r\n]*)*INDEX.*[\r\n]*'", $text, $formattext);
foreach ($formattext[0] As $track) {
	preg_match("'TRACK ([0-9]{2}) AUDIO'", $track, $tracknr);
	preg_match_all("'[A-Z]+ \"[^\"]*\"'", $track, $trackinfo);
		
	foreach ($trackinfo[0] As $trackinfovalue) {
		preg_match("'([A-Z]+) \"([^\"]*)\"'", $trackinfovalue, $trackinfovaluearray);
		$songinfo[$tracknr[1]][$trackinfovaluearray[1]] = $trackinfovaluearray[2];
	}
}

Deze code zal een cue sheet die er als volgt uit ziet:

TRACK 01 AUDIO
TITLE "Titel 1"
PERFORMER "Artiest 1"
INDEX 01 00:00:00
TRACK 02 AUDIO
TITLE "Titel 2"
PERFORMER "Artiest 2"
INDEX 01 04:25:51

Omzetten naar een array die er zo zal uitzien:
Array
(
[01] => Array
(
[TITLE] => Titel 1
[PERFORMER] => Artiest 1
)

[02] => Array
(
[TITLE] => Titel 2
[PERFORMER] => Artiest 2
)
)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan