Toon posts:

[php] Reg exe's probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met het probleem dat mn regexe te veel wordt uitgevoerd:
PHP:
1
<?if (!eregi("Koop", $naam1)) {$html = eregi_replace("Vervang 1","Vervang $naam1", $html);}?>

Dit stukje kijkt dus of er in de variabele $html Koop voorkomt, zo niet dan vervangt ie: 'Vervang 1' met 'Vervang $naam1'. Maar in de variabele $html zit ook nog een stuk tekst 'Vervang 10' en 'Vervang 11', en die worden dus ook vervangen voor 'Vervang $naam1', maar dat moet dus niet gebeuren want alleen 'Vervang 1' moet vervangen worden door 'Vervang $naam1'. Weet iemand hier een oplossing voor? Door bijvoorbeeld de vervangende regex maar 1 keer uit te laten voeren? Danke!

  • Grum
  • Registratie: Juni 2001
  • Niet online
preg_replace met een limit, preg_replace met een goede regex (word boundaries) om maar wat te noemen

Verwijderd

Volgens mij moet je dan de dubbele quotes vervangen door single quotes in je expressie. Staat ook wel iets over in de manual, weet het niet zeker meer.

edit:
Ja, ff opgezocht, als je single quotes gebruikt zou php geen interpolation van je variabele moeten doen, dus dat zou moeten werken

Verwijderd

Topicstarter
Ik heb er nu dus dit van gemaakt:
PHP:
1
<?if (!eregi("Koop", $naam1)) {$html = eregi_replace('Vervang 1','Vervang $naam1', $html);}?>

Maar nu is de output dus "Vervang $naam1" en niet "Vervang Bonaventura Kalou" (>:)) zoals er zo moeten komen te staan.

  • wietco
  • Registratie: Augustus 2001
  • Laatst online: 18:46
Dat klopt want php include alleen vars tussen " " en niet tussen ' ' d8 ik tenmiste :)

Verwijderd

Topicstarter
Op woensdag 17 juli 2002 19:00 schreef wietco het volgende:
Dat klopt want php include alleen vars tussen " " en niet tussen ' ' d8 ik tenmiste :)
Tot die conclusie was ik zelf ook al gekomen :)
Maar met de conclusie schiet ik niks op, ik wil een oplossing :)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op woensdag 17 juli 2002 19:12 schreef robbinh het volgende:
Maar met de conclusie schiet ik niks op, ik wil een oplossing :)
Lees de reactie van Grum dan ook es door.

Verwijderd

Topicstarter
preg_replace is toch alleen voor arrays? Dat is het dus niet, maar over dat limit kan ik ook niets over vinden in de manual, maar het moet dus ook niet een al te lang stuk code worden want dit stukje wordt 11 keer herhaald. Daarom wou ik sowieso iets simpels en niet het vele combineren van verscheidene functies, als het niet anders kan dan moet het wel maar toch.

Verwijderd

Op woensdag 17 juli 2002 19:25 schreef robbinh het volgende:
preg_replace is toch alleen voor arrays?
wijs 's aan waar dat staat in de manual dan? :?

Verwijderd

Topicstarter
Every parameter to preg_replace() can be an array.
d8 ik maar: can :)

over limit zie ik nu ook, FF dat proberen ja.
Maar ik kan limit toch ook gewoon gebruiken bij de eregi_replace?

Verwijderd

Topicstarter
Nu heb ik die limit er in verwerkt zoals in de manual staat:
PHP:
1
<?if (!eregi("Koop", $naam1)) {$html = preg_replace("Vervang 1","Vervang $naam1", $html, "1");}?>

Maar dan zegt ie:

Warning: Delimiter must not be alphanumeric or backslash in /www/htdocs/webscrip/voetbal/team.php on line 190

Verwijderd

Nou, zoals de eerste persoon, dacht ik al zei: gewoon zeggen dat er per se een word boundary \b of een whitespaceteken \s moet staan. Works for my CMS. :z

Verwijderd

Op woensdag 17 juli 2002 19:47 schreef robbinh het volgende:
Nu heb ik die limit er in verwerkt zoals in de manual staat:
PHP:
1
<?if (!eregi("Koop", $naam1)) {$html = preg_replace("Vervang 1","Vervang $naam1", $html, "1");}?>

Maar dan zegt ie:

Warning: Delimiter must not be alphanumeric or backslash in /www/htdocs/webscrip/voetbal/team.php on line 190
probeer is 1 ipv "1"
nu ziet hij 1 als een string ipv integer

Verwijderd

Topicstarter
Gang-ster:
waar zet ik die wordboundaries neer dan?

Foxboy:
dan geeft ie dezelfde error, had ik trouwens allemaal allang geprobeerd. Ook de optie die in de manual beschreven staat als: -1 waarbij alle matches worden vervangen geeft die error.

edit:

GoT iT:
[php]<?if (!preg_match('/Koop/i', $naam1)) { $html = preg_replace('/Vervang 1(?!\d)/i', 'Vervang '.$naam1, $html); }?>[/php]
Pagina: 1