preg_replace met haakjes

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Veur Heur

Veur Heur

30/05/2024 18:05:10
Quote Anchor link
Ik heb de volgende output uit een database:

naam
naam (iets)
naam (iets (nog iets))

Ik zou graag " (nog iets)" vervangen zien middels preg_replace er rekening mee houdend dat het ook niet kan voorkomen. "naam" en "iets" kan alles karakters bevatten.
 
PHP hulp

PHP hulp

21/11/2024 16:59:53
 
Rob Doemaarwat

Rob Doemaarwat

30/05/2024 19:02:04
Quote Anchor link
En moet " (nog iets)" dan perse tussen een ander setje haakjes staan (zoals in het voorbeeld "naam (iets (nog iets))", of mag het ook gewoon "los" staan (bijvoorbeeld "naam (nog iets)"?

En ik neem aan dat " (nog iets)" dus een variabele waarde heeft - gewoon een setje karakters?
Gewijzigd op 30/05/2024 19:02:31 door Rob Doemaarwat
 
Veur Heur

Veur Heur

30/05/2024 19:43:07
Quote Anchor link
De output moet zijn: “naam” of “naam (iets)”… maw (nog iets) moet helemaal komen vervallen.
 

30/05/2024 21:55:13
Quote Anchor link
En wil je dat die regexp in de database plaatsvindt voordat de query de uitvoer naar PHP stuurt?
Of wil je eerst extra I/O naar PHP (met minder CPU op de database) zodat je de regex in PHP kunt laten uitvoeren?

Aan de titel te zien zoek je het in PHP, maar het kan evt. ook in de database.
Gewijzigd op 30/05/2024 21:56:10 door
 
Veur Heur

Veur Heur

30/05/2024 22:00:00
Quote Anchor link
Dat is mij om het even. Let wel, ik gebruik MySQL dus misschien zit dat net wat anders in elkaar? Uit nieuwsgierigheid mogen beide opties worden gepost, is alleen maar leerzaam natuurlijk.
 

31/05/2024 07:47:13
Quote Anchor link
In MySQL kan je REGEXP_REPLACE() gebruiken.

Ik heb me nooit heel erg in reguliere expressies verdiept, omdat het doet wat je net zo goed in beter leesbare (PHP-)code kunt doen zoals het parsen van geneste haakjes. En omdat er verschillende varianten van zijn en verschillende implementaties.
Wat mij betreft kan je wat je wilt veel eenvoudiger en leesbaarder oplossen zonder reguliere expressies.
Een simpele for-lus die het aantal haakjes telt en een nieuwe string maakt, met alleen de tekens die je wilt.

Omdat je vraag gaat over reguliere expressies (misschien als onderdeel van nog meer expressies), op SO wordt jouw vraag ook gesteld. Het antwoord daar is dat onder meer PHP recursieve expressies ondersteunt.

Ik doe alle linkjes er bij, want ik heb op dit moment niet genoeg tijd en kennis om het uit te zoeken, maar misschien helpt dit je dichterbij een oplossing.
Gewijzigd op 31/05/2024 07:49:19 door
 
Ivo P

Ivo P

31/05/2024 09:39:57
Quote Anchor link
eens kijken:
testset
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
dit is een tekst
dit is een tekst (met haakjes)
dit is een tekst met (2 levels (van haakjes) en zo)

dit is een tekst met (2 keer) een (set haakjes) en niet genest
dit is een tekst met (2 keer) een (set haakjes (2e wel genest))


regex:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
^(.*\([^)]*)(\([^)]+\))(.*)$


Dat zou in PHP zijn
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$output
= preg_replace('#^(.*\([^)]*)(\([^)]+\))(.*)$#', '$1$3', $invoer);
?>


Verbeterpunt: Er blijven mogelijk nog wat spaties staan


Toevoeging op 31/05/2024 09:40:50:

output:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
dit is een tekst
dit is een tekst (met haakjes)
dit is een tekst met (2 levels  en zo)

dit is een tekst met (2 keer) een (set haakjes) en niet genest
dit is een tekst met (2 keer) een (set haakjes )
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.