Regex, Problemer med match inde i match og ny line i match
Hej, jeg er igang med at opdatere mit template system, og jeg har valgt at bruge regex, istedet for MANGE explodes :DJeg vil lige starte ud med sige at jeg er meget ny til regex, sådan her ser et af mine templates ud
code:
<html>
<head>
<title>Some test</title>
</head>
<body>
<php:if name="iftest" some="stuff">Some stuff asdasdwas</php:if name="iftest">
<php:if name="iftest2">Some stuff</php:if name="iftest2">
<php:var name="stuff" value="this is some value" blah="blsh" />
</body>
</html>
Jeg brugte det meste af dagen igår på at lave denne regex
code:
$pattern = '/<php:(.*[^ ])\s*name\s*=\s*[\"\'](.+?)[\"\'](.[^>]*|)>(.*)<\/php:\1\s*name\s*=\s*[\"\']\2[\"\']\s*>/';
preg_match_all($pattern,$html,$matches, PREG_SET_ORDER);
$tags = array();
for($i=0;$i<count($matches);$i++)
{
$tags[] = array(
'type' => $matches[$i][1],
'name' => $matches[$i][2],
'atributs' => $matches[$i][3],
'value' => $matches[$i][4],
'orginal' => $matches[$i][0]
);
}
$pattern = '/(?i)<php:(.*[^ ])\s*name\s*=\s*[\"\'](.+?)[\"\']\s*value\s*=\s*[\"\'](.+?)[\"\']\s*(.[^>]*|)\s*\/>/';
preg_match_all($pattern,$html,$matches, PREG_SET_ORDER);
for($i=0;$i<count($matches);$i++)
{
$tags[] = array(
'type' => $matches[$i][1],
'name' => $matches[$i][2],
'atributs' => $matches[$i][4],
'value' => $matches[$i][3],
'orginal' => $matches[$i][0]
);
}
Dog har jeg et par problemer mde den
1. Hvid der er en ny linje imellem <php:??></php:??> tagne, så matcher den det ikke
2. For normal tags, skal det første argument være "name". jeg ville høre om man kunne gøre sådan at man kunne sætte atributes i random rækkefølge.
3. Hvis der er et tag inde i et tag, så matcher den dem ikke rigtigt.
example hvis jeg prøver at paste dette template
code:
<body>
<php:if name="iftest" some="stuff">Some stuff <php:var name="stuff" value="this is some value" blah="blsh" /> asdasdwas</php:if name="iftest">
<php:if name="iftest2">Some stuff</php:if name="iftest2">
</body>
Så vil mit array se sådan her ud.
code:
Array
(
[0] => Array
(
[type] => if
[name] => iftest
[atributs] => some="stuff"
[value] => Some stuff <php:var name="stuff" value="this is some value" blah="blsh" /> asdasdwas
[orginal] => <php:if name="iftest" some="stuff">Some stuff <php:var name="stuff" value="this is some value" blah="blsh" /> asdasdwas</php:if name="iftest">
)
[1] => Array
(
[type] => if
[name] => iftest2
[atributs] =>
[value] => Some stuff
[orginal] => <php:if name="iftest2">Some stuff</php:if name="iftest2">
)
[2] => Array
(
[type] => if name="iftest" some="stuff">Some stuff <php:var
[name] => stuff
[atributs] => blah="blsh"
[value] => this is some value
[orginal] => <php:if name="iftest" some="stuff">Some stuff <php:var name="stuff" value="this is some value" blah="blsh" />
)
)
Tak for jeres hjælp
