Preg_match_all probleem
Ik heb een probleem, ben hier al 2 dagen mee bezig (avonden) maar ik kom er NIET uit :(
Wat ik probeer te doen:
Ik heb een template file waar ik een tag in heb staan met een soort van code woord, [INCLUDE-pagina.html].
Het eerste stuk "INCLUDE" moet door een preg_match_all eruit worden gehaald en in een array worden gestopt.
Dit lukt redelijk maar toch krijg ik een bracket mee, wat ik niet wil! :(
Ik wil dus een pattern hebben waarbij ik alle 2 de waardes kan uitlezen.
Deze waardes wil ik dus terug krijgen...
INCLUDE
pagina.html
Als jullie me kunnen helpen met het pattern dan kan ik ze zelf wel scheiden dmv een explode op het streepje.
Thanx alvast, en hopelijk kan ik na vanaaf verder :P
Heb meerdere dingen opgezocht over de patterns enzo maar mocht niet baten helaas.
Voorbeeld van mijn code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$output = 'gfhfgjhddfj [INCLUDE-pagina.html] dfhgfhgfh';
preg_match_all("/\[.*?]/", $output, $out);
foreach($out[0] as $key => $value){
$var = explode("-", $value);
}
?>
$output = 'gfhfgjhddfj [INCLUDE-pagina.html] dfhgfhgfh';
preg_match_all("/\[.*?]/", $output, $out);
foreach($out[0] as $key => $value){
$var = explode("-", $value);
}
?>
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$string = '[some-pagina.html]';
preg_match('/\[([a-z]+)-([a-z]+\.html)\]/i', $string, $matches);
//$matches[0] = 'some'
//$matches[1] = 'pagina.html'
?>
$string = '[some-pagina.html]';
preg_match('/\[([a-z]+)-([a-z]+\.html)\]/i', $string, $matches);
//$matches[0] = 'some'
//$matches[1] = 'pagina.html'
?>
Heb nooit echt de preg_match gebruikt, en er staat (vind ik) op php.net ook niet echt een 100% duidelijk omschrijving van alle patterns enzo.
Erg bedankt maar weer hoor! :D
Duidelijk antwoord + duidelijke code.
Graag gedaan!
Kan je helpen :P als ik dat weghaal gaat hij gelijk flippen haha xD
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$string = '[some-pagina.html]';
preg_match('/\[([a-z]+)-([a-z]+)\.html\]/i', $string, $matches);
//$matches[0] = 'some'
//$matches[1] = 'pagina'
?>
$string = '[some-pagina.html]';
preg_match('/\[([a-z]+)-([a-z]+)\.html\]/i', $string, $matches);
//$matches[0] = 'some'
//$matches[1] = 'pagina'
?>
Stel je wilt extensie ook checken/afdwingen:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$string = '[some-pagina.html]';
preg_match('/\[([a-z]+)-([a-z]+)\.(html|phtml|tpl)\]/i', $string, $matches);
//$matches[0] = 'some'
//$matches[1] = 'pagina'
//$matches[2] = type template
?>
$string = '[some-pagina.html]';
preg_match('/\[([a-z]+)-([a-z]+)\.(html|phtml|tpl)\]/i', $string, $matches);
//$matches[0] = 'some'
//$matches[1] = 'pagina'
//$matches[2] = type template
?>
Maar die extentie hoef je niet apart te doen, als hij gewoon pagina.html eruit haalt is dat genoeg.
Want dan kan ik het laten vervangen door de wat er staat, bijvoorbeeld pagina.html includen snappie.
Mijn eerste regex die haalt toch ook al pagina.html eruit? :X
Ja maar als er inplaats van .html .tpl staat dan haalt hij hem er niet uit. En bij de 2e regex geeft hij een 2e array waarde.. :$
Quote:
En bij de 2e regex geeft hij een 2e array waarde.. :$
En wat is de output van de array?
some
pagina
.html
Maar ik wil dit:
some
pagina.html
En als ik het zelf wist had ik het wel gedaan, maar weet gewoon niet hoe :P
en hoe ziet de var_dump eruit van de array?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$output = 'gfhfgjhddfj [INCLUDE-pagina.html] dfhgfhgfh';
preg_match('/\[([A-Z]+)-([a-z]+)\.(html|phtml|tpl)\]/i', $output, $matches);
//output Array ( [0] => [INCLUDE-pagina.html] [1] => INCLUDE [2] => pagina [3] => html )
?>
$output = 'gfhfgjhddfj [INCLUDE-pagina.html] dfhgfhgfh';
preg_match('/\[([A-Z]+)-([a-z]+)\.(html|phtml|tpl)\]/i', $output, $matches);
//output Array ( [0] => [INCLUDE-pagina.html] [1] => INCLUDE [2] => pagina [3] => html )
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$output = 'gfhfgjhddfj [INCLUDE-pagina.html] dfhgfhgfh';
preg_match('/\[([A-Z]+)-([a-z]+)\.(html|phtml|tpl)\]/i',
$output, $matches);
var_dump($matches);
echo $matches[1].'-'.$matches[2].'.'.$matches[3];
?>
$output = 'gfhfgjhddfj [INCLUDE-pagina.html] dfhgfhgfh';
preg_match('/\[([A-Z]+)-([a-z]+)\.(html|phtml|tpl)\]/i',
$output, $matches);
var_dump($matches);
echo $matches[1].'-'.$matches[2].'.'.$matches[3];
?>
Terug. Weet niet of het precies is wat je zoekt....
Bas van de Steeg op 07/04/2012 09:30:54: Als je het zo doet krijg ik alleen maar "INCLUDE-pagina.html"
Terug. Weet niet of het precies is wat je zoekt....
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$output = 'gfhfgjhddfj [INCLUDE-pagina.html] dfhgfhgfh';
preg_match('/\[([A-Z]+)-([a-z]+)\.(html|phtml|tpl)\]/i',
$output, $matches);
var_dump($matches);
echo $matches[1].'-'.$matches[2].'.'.$matches[3];
?>
$output = 'gfhfgjhddfj [INCLUDE-pagina.html] dfhgfhgfh';
preg_match('/\[([A-Z]+)-([a-z]+)\.(html|phtml|tpl)\]/i',
$output, $matches);
var_dump($matches);
echo $matches[1].'-'.$matches[2].'.'.$matches[3];
?>
Terug. Weet niet of het precies is wat je zoekt....
Ja precies wat jij doet wil ik niet :P
Ik wil dat [2] en [3] in 1 variabele zitten, dat ik dus pagina.html in [2] zit.