Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[PHP] reguliere expressie met preg_split

Anoniem
jweijde
4 antwoorden
  • Stel, ik wil de volgende string opsplitsen in losse waarden:
    Rood-Blauw, Rood Wit, Rood [Zwart, Lila], Rood

    Dit zouden dan moeten worden:
    waarde1 - Rood-Blauw
    waarde2 - Rood Wit
    waarde3 - Rood [Zwart, Lila]
    waarde4 - Rood

    Nu heb ik via-via een reguliere expressie gevonden die dit zou moeten doen met de preg_split functie in PHP. De code ziet er zo uit:
    [code:1:56deba4694]$regel = "Rood-Blauw, Rood Wit, Rood [Zwart, Lila], Rood";
    $waarden = preg_split('([^[,]+(\?:\[[^]]+])?)+',$regel);[/code:1:56deba4694]
    echter, hiermee krijg ik de volgende foutmelding:
    [quote:56deba4694]Warning: preg_split() [function.preg-split]: Unknown modifier '+' in C:\Program Files\UsbWebserver\Root\simplexml\ereg2.php[/quote:56deba4694]

    Ik ben zelf niet thuis in reguliere expressies, dus weet niet wat ik hiermee moet. Wie helpt me uit de brand?
  • Waarom zet je in Rood [Zwart, Lila] een komma? Dat maakt het alleen maar lastiger. Zet er een / in ofzo, en gebruik dan split om op de , te splitsen.
  • jammer genoeg kan ik weinig doen aan die komma. Ik krijg de gegevens zo aangeleverd. Ik heb via online tools de reguliere expressie getest en hij leek te werken. Alleen niet in de code.

    De regel is overigens puur een voorbeeld.
  • Die plus op het eind hoort er in elk geval niet thuis, da's alvast 1. En als ik zo kijk komt-ie dan nog niet uit.

    Zoals Jordy zegt is het inderdaad een verrekt moeilijke string om te splitten, doordat je eigenlijk geen constant patroon hebt. Uitgaande dat je te maken hebt met userinput waar je dus niet altijd evenveel invloed op hebt, zou ik toch eens kijken of je daar niet wat aan kunt doen, door de input voor te bereiden voor de verwerking. Bijvoorbeeld door de komma daarin te vervangen. Dat zou met zoiets moeten kunnen:
    [code:1:b5c91fd3bc]$regel = preg_replace('#(\[.+?),(.+?\])#', '$1/$2' , $regel);[/code:1:b5c91fd3bc]
    De inhoud van $regel wordt dan:
    [quote:b5c91fd3bc]Rood-Blauw, Rood Wit, Rood [Zwart/ Lila], Rood[/quote:b5c91fd3bc]

    Vervolgens kun je daar een stuk gemakkelijker op splitsen, aangezien je nu ineens een heel simpel patroon hebt. Je hebt dan zelfs geen reguliere expressie meer nodig maar je kunt gewoon explode() gebruiken:
    [code:1:b5c91fd3bc]$waarden = explode(', ', $regel);[/code:1:b5c91fd3bc]
    Dat resulteert in
    [code:1:b5c91fd3bc]Array
    (
    [0] => Rood-Blauw
    [1] => Rood Wit
    [2] => Rood [Zwart/ Lila]
    [3] => Rood
    )
    [/code:1:b5c91fd3bc]
    Mocht je per se die slash weer vervangen willen hebben door een komma, dan kan je daar altijd nog een str_replace() op loslaten.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.