Regular expression
Ik zit met het volgende. Ik heb een lap tekst en daarin zit de volgende verwijzing [[test]]. Nu wil ik uit de lap tekst waar de tag '[[test]]' staat een include doen naar een php file. Weet iemand hoe ik dit kan aanpakken met behulp van een regular expression? Oh en de tag tussen de brackets is variabel, dus naast test kan dit ook iets anders zijn. Alvast dankt voor de hulp!
Groeten
Gewijzigd op 01/01/1970 01:00:00 door Joost
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$message = '[[1]] txt [[2]]';
$pattern = '/\[\[[A-Za-z]+\]\]$/i';
preg_match_all($pattern, $message, $matches);
foreach($matches[0] as $match) {
$link = $match . ".ext";
$tmp = explode($match,$message);
foreach($tmp as $piece) {
if($i != 0) {
$message .= include($link) . $piece;
} else {
$message = $piece;
}
$i++;
}
}
echo $message;
?>
$message = '[[1]] txt [[2]]';
$pattern = '/\[\[[A-Za-z]+\]\]$/i';
preg_match_all($pattern, $message, $matches);
foreach($matches[0] as $match) {
$link = $match . ".ext";
$tmp = explode($match,$message);
foreach($tmp as $piece) {
if($i != 0) {
$message .= include($link) . $piece;
} else {
$message = $piece;
}
$i++;
}
}
echo $message;
?>
Zoiets? niet getest
Edit:
Apostrofe vergeten
Gewijzigd op 01/01/1970 01:00:00 door RT
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
error_reporting ( E_ALL );
$sBericht = '
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>
blabla
</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css" media="screen">
@import "style.css";
</style>
<!--[if IE]>
<style type="text/css">
@import "iestyle.css";
</style>
<![endif]-->
</head>
<body>
<div id="container">
[[test]]
</div>
<div id="anders">
[[anders]]
</div>
</body>
</html>
';
$aDelen = explode ( '[[' , $sBericht );
$aNieuw [ ] = array ( 'sTekst' => $aDelen [ 0 ] );
unset ( $aDelen [ 0 ] );
$i = 0;
foreach ( $aDelen as $iNummer => $sDeel )
{
$aSplit = explode ( ']]' , $sDeel );
$sBestand = $aSplit [ 0 ];
$aNieuw [ ] = array ( 'sBestand' => $sBestand );
$aNieuw [ ] = array ( 'sTekst' => $aSplit [ 1 ] );
$i++;
}
foreach ( $aNieuw as $iNummer => $aInfo )
{
if ( array_key_exists ( 'sBestand' , $aInfo ) )
{
include $aInfo [ 'sBestand' ] . '.php';
}
elseif ( array_key_exists ( 'sTekst' , $aInfo ) )
{
echo $aInfo [ 'sTekst' ];
}
}
?>
error_reporting ( E_ALL );
$sBericht = '
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>
blabla
</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style type="text/css" media="screen">
@import "style.css";
</style>
<!--[if IE]>
<style type="text/css">
@import "iestyle.css";
</style>
<![endif]-->
</head>
<body>
<div id="container">
[[test]]
</div>
<div id="anders">
[[anders]]
</div>
</body>
</html>
';
$aDelen = explode ( '[[' , $sBericht );
$aNieuw [ ] = array ( 'sTekst' => $aDelen [ 0 ] );
unset ( $aDelen [ 0 ] );
$i = 0;
foreach ( $aDelen as $iNummer => $sDeel )
{
$aSplit = explode ( ']]' , $sDeel );
$sBestand = $aSplit [ 0 ];
$aNieuw [ ] = array ( 'sBestand' => $sBestand );
$aNieuw [ ] = array ( 'sTekst' => $aSplit [ 1 ] );
$i++;
}
foreach ( $aNieuw as $iNummer => $aInfo )
{
if ( array_key_exists ( 'sBestand' , $aInfo ) )
{
include $aInfo [ 'sBestand' ] . '.php';
}
elseif ( array_key_exists ( 'sTekst' , $aInfo ) )
{
echo $aInfo [ 'sTekst' ];
}
}
?>
http://www.phphulp.nl/php/tutorials/4/520/
Wat een ellelange code om iets wat ook met 1 regel code is te doen.
Zie ook de tutorial Wat een ellelange code om iets wat ook met 1 regel code is te doen.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$tekst = '<html><head><title>TEST!</title></head><body><div id="header">[[header]]</div><div id="menu">[[menu]]</div><div id="footer">[[footer]]</div></body></html>';
// alle bestanden een naam geven, direct linken zou niet mijn voorkeur hebben
$phpfiles['header'] = 'header.php';
$phpfiles['footer'] = 'footer.php';
$phpfiles['menu'] = 'menu.php';
print preg_replace('/\[\[(\w+)\]\]/e','include($phpfiles[\'\\1\'])', $tekst);
?>
$tekst = '<html><head><title>TEST!</title></head><body><div id="header">[[header]]</div><div id="menu">[[menu]]</div><div id="footer">[[footer]]</div></body></html>';
// alle bestanden een naam geven, direct linken zou niet mijn voorkeur hebben
$phpfiles['header'] = 'header.php';
$phpfiles['footer'] = 'footer.php';
$phpfiles['menu'] = 'menu.php';
print preg_replace('/\[\[(\w+)\]\]/e','include($phpfiles[\'\\1\'])', $tekst);
?>
Gewijzigd op 01/01/1970 01:00:00 door Arend a
Ah, da's inderdaad een stuk mooier. Heel erg bedankt daarvoor, ik wist niet dat het zo kon. Bedankt Arend.
Regular expressions zijn nog veel geschikter ;)