match torrent name
preg_match
En hiermee kan ik nu met succes de volgende string ontleden:
naar:
Zoals je ziet is veld 5 leeg en dat komt omdat er niet nog in waarde is tussen de tekens [ en ].
Als ik nu de volgende string heb:
Zie je dat er tussen [720p], [10bit] en [8F819AFD] spaties staan waardoor ik niet de juiste waarden terug krijg.
Weet iemand hoe ik dit zou kunnen oplossen? Of klopt mijn match gewoon totaal niet? Ik heb nog enkele probleempjes met deze match maar ik wil eerst dit graag oplossen.
edit: Als er achter het aflevering nummer v2 of v3 staat pakt ie deze ook goed. Soms wil er namelijk ook weleens dit staan 03v2 omdat het dan betere versie is als de vorige.
Ik heb nu de volgende match voor de functie Code (php)
1
/^\[(.+)\](.+)- (.+v?.+) (\[?[0-9a-zA-Z]*\]?)(\[?[0-9a-zA-Z]*\]?)(\[[0-9a-zA-Z]+\])\..+/
En hiermee kan ik nu met succes de volgende string ontleden:
naar:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Array
(
[0] => [UTW-Mazui] Little Busters! - 03 [720p][D04E264A].mkv
[1] => UTW-Mazui
[2] => Little Busters!
[3] => 03
[4] => [720p]
[5] =>
[6] => [D04E264A]
)
(
[0] => [UTW-Mazui] Little Busters! - 03 [720p][D04E264A].mkv
[1] => UTW-Mazui
[2] => Little Busters!
[3] => 03
[4] => [720p]
[5] =>
[6] => [D04E264A]
)
Zoals je ziet is veld 5 leeg en dat komt omdat er niet nog in waarde is tussen de tekens [ en ].
Als ik nu de volgende string heb:
Zie je dat er tussen [720p], [10bit] en [8F819AFD] spaties staan waardoor ik niet de juiste waarden terug krijg.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Array
(
[0] => [IB] Sukitte Iinayo - 04 [720p] [10bit] [8F819AFD].mkv
[1] => IB
[2] => Sukitte Iinayo
[3] => 04 [720p] [10bit]
[4] =>
[5] =>
[6] => [8F819AFD]
)
(
[0] => [IB] Sukitte Iinayo - 04 [720p] [10bit] [8F819AFD].mkv
[1] => IB
[2] => Sukitte Iinayo
[3] => 04 [720p] [10bit]
[4] =>
[5] =>
[6] => [8F819AFD]
)
Weet iemand hoe ik dit zou kunnen oplossen? Of klopt mijn match gewoon totaal niet? Ik heb nog enkele probleempjes met deze match maar ik wil eerst dit graag oplossen.
edit: Als er achter het aflevering nummer v2 of v3 staat pakt ie deze ook goed. Soms wil er namelijk ook weleens dit staan 03v2 omdat het dan betere versie is als de vorige.
Gewijzigd op 10/11/2012 11:39:55 door Mebus Hackintosh
Dus netjes splitten met je code, dan alles spaties weghalen (array_walk(trim()) of zo?).
Ik zou het gewoon splitten op de [, dan krijg je toch ook alle onderdelen?
edit: even een korte uitleg over hoe zo een string is opgebouwd:
[fansubgroep] Animenaam - (aflevering en eventueel welke versie) [extra informatie eventueel][extra informatie eventueel][hash voor het bestand om te controleren of het goed is gedownload en niet beschadigt is].bestandsextensie
Ik kan dus van de hokjes extra informatie deze ook met een tweede preg_match filteren?
edit:
Code (php)
1
preg_match('/^\[(.+)\](.+)- (.+v?.+) (\[?[0-9a-zA-Z]*\]?)(\[?[0-9a-zA-Z]*\]?)(\[[0-9a-zA-Z]+\])\..+/', str_replace('_', ' ', $XML['channel']['item'][$a]['title']), $matches)
Gewijzigd op 10/11/2012 11:51:41 door Mebus Hackintosh
Van die preg_match-dingen heb ik te weinig kaas gegeten om daar ook maar iets zinnigs over te zeggen.
Alle extra informatie wil ik graag opslaan en daarvoor moet ik deze string dus zien te ontleden :) Maar als het niet lukt kan ik het laatste stukje altijd met een tweede match doen..
Code (php)
1
preg_match('/^\[(.+)\](.+)- (.+v?.+) (\[?\w*\]?)(\[?\w*\]?)(\[\w+\])\..+/', str_replace(array('_', '] ['), array(' ', ']['), $XML['channel']['item'][$a]['title']), $matches);
Hiermee vervang ik de underscores met spaties en vervang ik de spaties tussen ] en [ met niks.
Nu heb ik alleen nog een probleem met het volgende:
[Commie] Upotte!! - OVA [BD 720p AAC][B0D91BD6].mkv
Zoals je ziet staat er een spatie tussen BD 720p en 720p en AAC waardoor ik het volgende krijg:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Array
(
[0] => [Commie] Upotte!! - OVA [BD 720p AAC][B0D91BD6].mkv
[1] => Commie
[2] => Upotte!!
[3] => OVA [BD 720p
[4] => AAC]
[5] =>
[6] => [B0D91BD6]
)
(
[0] => [Commie] Upotte!! - OVA [BD 720p AAC][B0D91BD6].mkv
[1] => Commie
[2] => Upotte!!
[3] => OVA [BD 720p
[4] => AAC]
[5] =>
[6] => [B0D91BD6]
)
een spate in de regex na \w helpt niet.
Gewijzigd op 11/11/2012 22:36:17 door Mebus Hackintosh
vb:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$entry = array(
0 => 'foo',
1 => false,
2 => -1,
3 => null,
4 => ''
);
print_r(array_filter($entry));
?>
$entry = array(
0 => 'foo',
1 => false,
2 => -1,
3 => null,
4 => ''
);
print_r(array_filter($entry));
?>
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
30
31
32
33
34
35
36
37
38
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
30
31
32
33
34
35
36
37
38
for($a=count($XML['channel']['item'])-1;$a>=0;$a--)
{
$file = $XML['channel']['item'][$a]['title'];
$file = str_replace(array('_', '] ['), array(' ', ']['), $file);
$file = trim($file);
$info = array();
for($b=0;$b<strlen($file);$b++)
{
if($file{$b} == '[' || $file{$b} == ']')
{
$info[] = $b;
}
}
$acinfo = '';
for($c=0;$c<count($info);$c++)
{
if($c % 2)
{
$scinfo ='';
for($d=$info[$c-1];$d<=$info[$c];$d++)
{
$scinfo .= $file{$d};
}
$acinfo[] = $scinfo;
}
if($c==1)
{
$sanime = '';
for($e=$info[$c]+1;$e<$info[$c+1];$e++)
{
$sanime .= $file{$e};
}
}
}
echo $XML['channel']['item'][$a]['title'].'<br />';
echo $sanime.'<br />';
print_r($acinfo);
}
{
$file = $XML['channel']['item'][$a]['title'];
$file = str_replace(array('_', '] ['), array(' ', ']['), $file);
$file = trim($file);
$info = array();
for($b=0;$b<strlen($file);$b++)
{
if($file{$b} == '[' || $file{$b} == ']')
{
$info[] = $b;
}
}
$acinfo = '';
for($c=0;$c<count($info);$c++)
{
if($c % 2)
{
$scinfo ='';
for($d=$info[$c-1];$d<=$info[$c];$d++)
{
$scinfo .= $file{$d};
}
$acinfo[] = $scinfo;
}
if($c==1)
{
$sanime = '';
for($e=$info[$c]+1;$e<$info[$c+1];$e++)
{
$sanime .= $file{$e};
}
}
}
echo $XML['channel']['item'][$a]['title'].'<br />';
echo $sanime.'<br />';
print_r($acinfo);
}