Ik ben op het moment bezig met een Stackbased Template-parser, mede voor mijn CMS-systeempje. Het werkt allemaal als een trein, maar ik zit met een probleempje. Ik ben niet zo'n regex-koning (koning in het latijn is 'rex', toeval?
)
Het probleem is als volgt: ik heb bijvoorbeeld een string als deze:
Nu parse ik die met de volgende regex:
Dit gaat allemaal goed, dankzij de regex mag ik beginnen met zowel ' als ", en mag ik ook eindigen met ' en ". Nu wil ik graag controleren of het laatste aanhalingsteken " of ' is. Dan kan ik namelijk ook aanhalingstekens binnen de value van een attribuut gebruiken, dus zo:
Ik heb in de PHP manual gekeken, en daar staat een hele hoop over zogenaamde 'Back references'. Daarmee kun je terugkijken naar een bepaald sup-pattern en kijken wat daar de waarde van was. Als ik in het bovenstaande regex daar gebruik van ga maken, krijg ik dus iets als volgt:
Maar dit werkt dus niet
Is er een regex-rex in de buurt die mij even kan vertellen hoe het wel moet? Bedankt alvast
Het probleem is als volgt: ik heb bijvoorbeeld een string als deze:
code:
1
| attr="value" blaat="woei" |
Nu parse ik die met de volgende regex:
code:
1
| preg_match_all("/([^\=\"]+)(\=)(\"|\')([^\"]*?)(\'|\")([ \]])/i",$string,$matches); |
Dit gaat allemaal goed, dankzij de regex mag ik beginnen met zowel ' als ", en mag ik ook eindigen met ' en ". Nu wil ik graag controleren of het laatste aanhalingsteken " of ' is. Dan kan ik namelijk ook aanhalingstekens binnen de value van een attribuut gebruiken, dus zo:
code:
1
| attr="blaat'woei" test='blaat"woei" blaat' |
Ik heb in de PHP manual gekeken, en daar staat een hele hoop over zogenaamde 'Back references'. Daarmee kun je terugkijken naar een bepaald sup-pattern en kijken wat daar de waarde van was. Als ik in het bovenstaande regex daar gebruik van ga maken, krijg ik dus iets als volgt:
code:
1
| preg_match_all("/([^\=\"]+)(\=)(\"|\')([^\"]*?)(\2)([ \]])/i",$string,$matches); |
Maar dit werkt dus niet