Archief - PHP: preg_replace

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

[f8]-[Iwan]

Legacy Member
Dit zet enkel het volledige voorkomen van "php" in een span, is het mogelijk om gelijk waar "php" in voorkomt te vervangen door een span? e.g. "8ffhfyphpklmtiu" >>> "8ffhfy<span style="...">php</span>klmtiu"

Het heeft iets te maken met de Pattern Modifiers, maar ik geraak er niet aan uit...

PHP:
$searchthis="php";
$description="<a href=\"http://www.php.net\">php website 8ffhfyphpklmtiu</a> nog meer tekst 8ffhfyphpklmtiu";

$description = str_replace('\"', '"', preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "preg_replace('#\b(" . $searchthis . ")\b#i', '<span style=\"background-color: #FFFF00\">\\\\1</span>', '\\0')",$description));

print $description;

killgore

Legacy Member
str_replace("php","php ding in span");

???

of begrijp ek u vraag verkeerd :p (zeer wrsch)?

killgore

Legacy Member
leer duidelijke vragen stellen ffs

uit wat gij vraagt:
Dit zet enkel het volledige voorkomen van "php" in een span, is het mogelijk om gelijk waar "php" in voorkomt te vervangen door een span? e.g. "8ffhfyphpklmtiu" >>> "8ffhfy<span style="...">php</span>klmtiu"
is mijn antwoord vrij correct <_<.

een vage beschrijving zijn we niets mee

waarom denkte da ik enige ben dat tot nu toe geantwoord heeft ?

[f8]-[Iwan]

Legacy Member
killgore zei:
waarom denkte da ik enige ben dat tot nu toe geantwoord heeft ?

Omdat dit geen simpele vraag is...waar ook geen simpel antwoord op zal zijn zoals het uwe. Tenzij jij natuurlijk alles weet over Pattern Modifiers in php?

Moest je naar de code gekeken hebben zou je zien dat er een combinatie van str_replacen en preg_replace gebruikt is, jij gaat gewoon gaan zeggen dat str_replace moet gebruiken terwijl ik het gebruik...

Tyfius

Legacy Member
Ik begrijp uw vraag ook niet, en als ik ze begrijp dan is mijn eerste reactie ook dezelfde als killgore, maw een str_replace.

Zoiets dus:
PHP:
$zin = "azertyphpazerty";
$replace = "php";
$with = "<span>php</span>";

$newzin = str_replace($replace, $with, $zin);
// $newzin geeft dus: azerty<span>php</span>azerty

killgore

Legacy Member
Om over uw code te praten, deze trekt op niets, ze is onleesbaar, wie gaat er nu ook 3 van dergelijke ingewikkelde statements in 1 lijn zetten :wtf:.
Daarnaast is uw vraag gewoon onduidelijk, moet ek er een poll over maken of zo? Je vraagt kan php vervangen worden door dit? dat kan idd met een str_replace. Ne keer ophouden me mij aan te vallen en in te zien dat de fout ligt bij u foute omschrijving zou mooi zijn.

edit2: ik gok dat het de bedoeling is overal php te vervangen tenzij het binnen een html tag zit?

edit3: originele post maar verwijderd, wordt toch wrsch nie goe opgepakt

[f8]-[Iwan]

Legacy Member
Nieuwe poging:

PHP:
$searchthis="php"; 
$description="<a href=\"http://www.php.net\">php website</a> nog meer tekst over php"; 

$description = str_replace('\"', '"', preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "preg_replace('#\b(" . $searchthis . ")\b#i', '<span style=\"background-color: #FFFF00\">\\\\1</span>', '\\0')",$description)); 

print $description


Wat goed is en niet mag veranderen:
Dit zet "php" uit de url-tekst (php website) in een span en niet de php die voorkomt in het attribuut href (http://www.php.net)


Wat niet goed is en moet veranderen:
Dit zet "php" in de tekst (nog meer tekst over php) niet in een span style.​

killgore

Legacy Member
tijdelijk (kmoe gaan eten), 2 staps oplossing:

PHP:
$description = preg_replace("#(href=\".*?)php(.*?\")#","\\1&#112;&#104;&#112;\\2",$description);
$description = str_replace("php","<span style=\"background-color: #FFFF00\">php</span>",$description);

voor "algemenere" php binnen <> niet te vervangen is de uitbreiding niet zo moeilijk :).

[f8]-[Iwan]

Legacy Member
Zit ergens foutje in:

PHP:
$searchthis="php"; 
$description="<a href=\"http://www.php.net\">php website</a> nog meer tekst over php"; 
$description = preg_replace("#(href=\".*?)$searchthis(.*?\")#","\\1$searchthis\\2",$description);
$description = str_replace($searchthis,"<span style=\"background-color: #FFFF00\">php</span>",$description);

Link met voorbeeld (onderaan de pagina): http://www.donotforget.be/links/search.php?searchthis=php php is dus een variabele en kan vanalles zijn...

In de source kan je zien dat hij php in de href ook in een span style zet.

killgore

Legacy Member
der is geen probleem met die code, alleen een probleempje met dit forum :p:

1e preg replace is dit: $description = preg_replace("#(href=\".*?)php(.*?\")#","\\1& #112;& #104;& #112;\\2",$description);

wel de spaties achter & verwijderen.

[f8]-[Iwan]

Legacy Member
$searchthis bevat "php" maar kan vanalles bevatten, met die ASCII codes blijft dit enkel beperk tot de string "php".

killgore

Legacy Member
[f8]-[Iwan] zei:
$searchthis bevat "php" maar kan vanalles bevatten, met die ASCII codes blijft dit enkel beperk tot de string "php".
ah, k, verkeerd begrepen.

Je kan nog omzetten, ma dat zou wat omslachtig zijn, kzal is zien vo een deftige regex dan ;).

edit: na nog effe uw preg te bekeken hebben: ligt niet aan pattern modifiers hoor, uw outer zaken zijn nl \> en \<, wat dus enkel zaken zal vinden tussen > en <, en niet meer na uw laatste > dus. Ksnap ook niet dat je gaat repeaten, is denk ik nergens voor nodig. Nu ja, dat kan je eventueel later aanpassen :).

killgore

Legacy Member
PHP:
<?php
$searchthis="php";
$description="php voor uw html tags <a href=\"http://www.php.net\">php website</a> nog meer tekst over php";
$description2="htmlloze php string";
$description = str_replace('\"', '"', preg_replace('#((^[^<>]*$)|(^[^>]*)\<|\>([^>]*$)|\>(((?>([^><]+|(?R)))*)\<))#e', "preg_replace('#\b(" . $searchthis . ")\b#i', '<span style=\"background-color: #FFFF00\">\\\\1</span>', '\\0')",$description)); 
$description2 = str_replace('\"', '"', preg_replace('#((^[^\<\>]*$)|(^[^>]*)\<|\>([^>]*$)|\>(((?>([^><]+|(?R)))*)\<))#e', "preg_replace('#\b(" . $searchthis . ")\b#i', '<span style=\"background-color: #FFFF00\">\\\\1</span>', '\\0')",$description2));
print $description;
print "<br />\n";
print $description2;
?>

Et voila :).

kheb nie getest op geneste html tags (heb vertrouwen in uw recursieve pattern :p).

edit: was eentje voor zonder html vergeten,toegevoegd nu ;)

[f8]-[Iwan]

Legacy Member
Edit: Thanks werkt perfect!

Dacht even dat er iets loos was maar zoekt blijkbaar naar exacte matches van zoekwoord.

Hoop dat ik ooit es iets kan terugdoen.

killgore

Legacy Member
n/p ze, daarvoor is dit forum er :).

Zorg gewoon da u probleembeschrijving int vervolg wa duidelijker is :p.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan