[php/regex] Hoe niet laten replacen in bepaalde stukken? *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik haal dus uit een database stukken html code.
met:
$rowMessage["titel"] = ereg_replace($q0, "<span class=\"q0\">".$q0."</span>" ,$rowMessage["titel"]);
verander ik alle stukken tekst die op q0 lijken.

Nu komt het soms voor dat die q0 ook in de html voorkomt.
Hoe zorg ik ervoor dat hij enkel die q0 vervangt als q0 voorkomt buiten html-tags?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Niemand?

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Wat je feitelijk wilt is dat de tekst die vervangen moet worden tussen > en < staat. 't makkelijkst daarvoor is gewoon een regular expression bouwen die 't volgende doet:

code:
1
Kijk of er een > voorkomt, en tot aan de te matchen $q0 geen <


Kijk eens in de FAQ onder regular expressions voor wat voorbeelden en tips hoe je met regular expressions moet werken en ga een beetje puzzelen. Eens kijken of je eruit komt ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Mocht je er niet uikomen heb ik volges mij nog wel ergens een kant en klare oplossing liggen aangezien ik tegen hetzelfde probleem ben aangelopen. Maar je weet hoe je het meeste leert :)

P&W FAQ - Regular expressions

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
't lukt me niet echt.
Heb je geen tip om me meer in de juiste richting te sturen?
Oplossing mag natuurlijk ook altijd :p

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Laat eens zien wat je nu hebt en we helpen je waar mogelijk verder op weg :)
x[^a-c]y

x gevolgd door alles behalve de letters die tussen a en c voorkomen, gevolgd door y

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
function inner_replace($data) {
global $term;
return ">".preg_replace("/$term/si", <span class=\"$term\">$term</span>", $data[1])."<";
}

$term = $q0;
$rowMessage["tekst"] = (preg_replace_callback("/>([^<]*)</si", "inner_replace", $rowMessage["tekst"]));

[ Voor 60% gewijzigd door Verwijderd op 04-01-2004 13:24 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Weer niemand een reactie? :p

Acties:
  • 0 Henk 'm!

  • Alex
  • Registratie: Juli 2001
  • Laatst online: 20-08 21:38
wat dacht je ervan om simpelweg op class=\"".$term."\" te matchen?
Als je het inzicht niet hebt om een goede regexp te maken moet je het jezelf gewoon makelijk maken. :)

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik moet helemaal niet matchen op class...

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

WardElst:
Weer niemand een reactie? :p
Euhm, wat wil je dan :? Je kwakt wat code neer zonder er ook maar iets bij te zeggen. Moeten wij het allemaal uitproberen en dan zeggen: Goed gedaan knul? ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Alex
  • Registratie: Juli 2001
  • Laatst online: 20-08 21:38
Verwijderd schreef op 03 januari 2004 @ 16:01:
Ik moet helemaal niet matchen op class...
1. Je weet zeker dat je gematchte string goed is
2. Je kunt hem makkelijk verschrijven.

Je kunt ook dit matchen: class=\"(".$term.")\"...

* Alex hoort het wel als de hulp te wensen overlaat 8)7 |:(

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Alex de Groot:
* drm hoort het wel als de hulp te wensen overlaat 8)7 |:(
* drm leest niet goed ;)

De bedoeling is nl het volgende. Consider deze tekst:
code:
1
2
3
<html> 
   dit is html 
</html>

en dan het woord 'html' replacen door <span class="html">html</span>. Als je dat gewoon als een kip zonder kop doet, krijg je dus:
code:
1
2
3
<<span class="html">html</span>>
   dit is <span class="html">html</span>
</<span class="html">html</span>>


Die "class" die jij bedoelt, is dus nog helemaal niet aanwezig op het moment dat de replace uitgevoerd moet worden ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nu ja, mijn code was een reactie op Spider.007's vraag: Laat eens zien wat je nu hebt ...

Dat deze code niet werkte, was een conflict met de rest van mijn code.

Het werkt dus.
Al blijf ik wel nieuwsgierig naar de propere oplossing die jullie in gedachte hadden.

[ Voor 53% gewijzigd door Verwijderd op 04-01-2004 13:19 ]

Pagina: 1