[PHP] help, anti patterns met preg_replace

Pagina: 1
Acties:

  • red_indian
  • Registratie: Maart 2000
  • Laatst online: 24-06 16:43

red_indian

 Smokin' Suckz B!

Topicstarter
na ongeveer twee uur te hebben liggen klooien (leuk om een keer zelf achter de 'greedy'-ness te komen van ereg, not! |:( ) en php.net en diverse postings op got te hebben geraadpleegd keer ik mij tot de die-hard PHP'rs op dit forum.

wat ik wil (uitleg):
ik wil als ergens bijvoorbeeld geen "GoT" staat het toevoegen. nu kun je [^GoT] doen maar dan krijg je geen 'G', 'o' en 'T', maar niet geen 'GoT'.

hoe vertel ik mijn pattern dat hij het niet voorkomen van een specifieke combinatie van letters moet matchen. (begrijpt u het nog?)

een voorbeeld (ik wil het tegenovergestelde, dus altijd maar *niet* bij onze henk):
PHP:
1
2
3
4
5
<?
$txt = "stukkie text -henk regeert- ander stukkie text";
$match  = "-(henk.*)-";
$txt = preg_replace("/$match/", "- \\1 niet -", $txt);
?>

output (zie voorbeeld):
"stukkie text - henk regeert niet - ander stukkie text"

nu wil ik (zie voorbeeld):
"stukkie text - sjaak regeert niet - ander stukkie text"
"stukkie text - iedereen regeert niet - ander stukkie text"

maar als ik dan henk doe moet hij gewoon de oorspronkelijke input returnen, e.g:
"stukkie text -henk regeert- ander stukkie text"

duidelijker kan ik het niet uitleggen.

wie o wie? het heeft mij al een aantal hersenkrampen bezorgd. ik hoop dat ik te moeilijk denk :P

p.s. geen reply van:
if(empty(strpos('henk', etc.)) preg_replace(etc.);

Need a cuesheet/tracklisting? (meer dan 500.000 online)


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
ik had deze thread niet gezien, anders had ik wel eerder gereageert. maargoed... dit kan met 'negative lookahead':
code:
1
2
3
4
$txt = "blz bla xxx bla bla blub";
$txt = preg_replace("_bla(?! xxx)_", "_bla_", $txt);

echo $txt;

dit vervangt alle 'bla' waar geen ' xxx' achterstaat. de syntaxis van negative lookahead is dus (?!...). suc6!

  • tomato
  • Registratie: November 1999
  • Niet online
Op donderdag 18 oktober 2001 22:59 schreef marcusk het volgende:
ik had deze thread niet gezien, anders had ik wel eerder gereageert. maargoed... dit kan met 'negative lookahead':
Dit kan alleen in perl (maja, je hebt toch standaard PCRE in PHP tegenwoordig ;) ).
Denk er ook aan dat de negative lookahead niets van de string 'consumeert', het is dus geen onderdeel van de Match.

* tomato begreep eigenlijk nog niet helemaal wat er nou precies bedoeld werd :o

  • red_indian
  • Registratie: Maart 2000
  • Laatst online: 24-06 16:43

red_indian

 Smokin' Suckz B!

Topicstarter
ontzettend bedankt! :+

het was niet helemaal de oplossing maar het heeft me in ieder geval tot de oplossing geleid.

eindelijk! thnx, nu kan ik weer rustig 'sleep()'-en >:)

ik heb nu <? $match = "((?!(henk)).*?)"; ?> gebruikt en dat werkt perfect met preg als 'ontkennende match' string.

beetje vaag, maar hopelijk heeft iemand anders er ooit weer wat aan met de search.

Need a cuesheet/tracklisting? (meer dan 500.000 online)