Toon posts:

[PHP] RegEx om URL en IMG toe te voegen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Kun je met een Regular Expressionals je in een string het volgende hebt staan "http://www.yahoo.com en [url="http://www.yahoo.com/plaatje.gif""]http://www.yahoo.com/plaatje.gif"[/url] dit laten vervangen door <a href="http://www.yahoo.com">http://www.yahoo.com</a> en [img]"http://www.yahoo.com/plaatje.gif"> In[/img]http://www.iets.com</A> dan zie je al dat de plaatjes ook zo'n link krijgen. Ik heb deze optie nog nooit op een Forum gezien en ik denk ook dat nog nooit iemand deze heeft gemaakt. Nu ik er nog eens over nadenk moet je eerst alles omzetten naar <a href="http://www.plaatje.com/plaatje.gif">http://www.plaatje.gi"f</a> en dan om laten zetten naar [img]"http://www.plaatje.com/plaatje.gif"[/img]
Dan moet je dus een RegEx hebben die alles waar http://www.(een of ander adres).[gif|jpg|anderformaat] heeft. Weet iemand wat hier de RegEx voor is, misschien met een beetje uitleg?

Op http://www.phpbuilder.com/columns/dario19990616.php3 heb ik gekeken en ook op http://uk.php.net/manual/nl/function.preg-replace.php en nog een paar sites. De search natuurlijk ook, maar daar wordt alleen op de http://www.yahoo.com naar <a href="http://www.yahoo.com">http://www.yahoo.com</a> variant gekeken.

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Zoeken op UBB in de search geeft je een heel hoop topics die je kunnen helpen.....

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
Dat heb ik gedaan. Maar of ik kan niet zo goed zoeken of het staat er gewoon niet. Het gaat er dus om om van http://www.hallo.com/13.gif [img]"http://www.hallo.com/13.gif"[/img] te maken en dat heb ik nergens gevonden. Zou iemand alsjeblieft willen antwoorden met iets uit de search of anders zelf even willen zeggen hoe het zou moeten?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op zaterdag 27 april 2002 19:04 schreef gang-ster het volgende:
Zou iemand alsjeblieft willen antwoorden met iets uit de search of anders zelf even willen zeggen hoe het zou moeten?
Je weet hoe je een gewone url kan vinden toch?

Maar watnou als zo'n url op (.gif|.jpeg|.jpg|.png) eindigt :? Dan moet je er een plaatje van maken.

Bijkomstig nadeel is natuurlijk dat je in jouw oplossing alles wat op (.gif|.jpeg|.jpg|.png) eindigt NIET om moet zetten in een klikbare url ;)


Dus je krijgt 2 regexp's
1. Zoek alle plaatjes op, ala: http://(.*)(.gif|.jpeg|.jpg|.png)
2. Zet alle overige url's om: http://(.*)(^:.gif|.jpeg|.jpg|.png) en evt de ftp's nog...
* ACM is trouwens de constructie voor "niet" vergeten.
Neem bovenstaande regexp's niet klakkeloos over, ze zijn niet perfect maar bedoeld als duw in de goede richting.

en lees:
[topic=469314/1/100]

es door

  • ebas
  • Registratie: Maart 2001
  • Laatst online: 20-04-2017

ebas

 

Check ff de source van XMB forum

Verwijderd

Topicstarter
Op zaterdag 27 april 2002 21:07 schreef ebas het volgende:
Check ff de source van XMB forum
Er zijn op dit moment geen downloads beschikbaar. :?
Maar bedankt voor de reactie. Ik denk dat de twee problemen van vandaag zullen worden opgelost vooral dankzij ACM, maar zullen is nog niet zijn dus we zullen zien. :)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Mocht je er nog wat aan hebben, ik heb zelf ook nog een beetje lopen knoeien ermee:
PHP:
1
<?preg_match('_\s(http://(?:\S*)\.(?:gif|jpg|jpeg|png))\s_U', " http://www.tweakers.net/bla.gif ", $matches);print_r($matches);preg_match('_\s(http://(?:\S*)(?<!\.gif|\.jpg|\.png|\.jpeg))\s_U', " http://www.tweakers.net/bla.gif ", $matches);print_r($matches);?>

De eerste matched alles met .gif/etc en stopt het in \1 (te gebruiken bij preg_replace)
De tweede doet het omgekeerde en matched alles zonder .gif/etc als extensie :) (en stopt het in \1 )
Hier zijn uiteraard nog wat varianten op te bedenken voor serieus gebruik :)

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

Op zaterdag 27 april 2002 21:49 schreef ACM het volgende:
Mocht je er nog wat aan hebben, ik heb zelf ook nog een beetje lopen knoeien ermee:
ik, IK ?
tsk :D

Klaar voor een nieuwe uitdaging.


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op zaterdag 27 april 2002 21:55 schreef chem het volgende:
ik, IK ?
tsk :D
Jij en pim ook, maar het grootste deel had ik al! :P

Verwijderd

Topicstarter
ACM je probeert al die ventjes(ook ik nu) echt helemaal "op te voeden" door dingen aan te geven van "probeer dit eens". Dit is op zich wel een goede manier, ook al is het soms ook wel eens handig op te knippen en te plakken. *D

P.S. Je kunt, als je je ICQ toch altijd op unavailable hebt staan, je ICQ nummer net zo goed uit je profiel verwijderen.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op zaterdag 27 april 2002 22:01 schreef gang-ster het volgende:
ACM je probeert al die ventjes(ook ik nu) echt helemaal "op te voeden" door dingen aan te geven van "probeer dit eens". Dit is op zich wel een goede manier, ook al is het soms ook wel eens handig op te knippen en te plakken. *D
Dat proberen we idd :)
offtopic:
[quote]
P.S. Je kunt, als je je ICQ toch altijd op unavailable hebt staan, je ICQ nummer net zo goed uit je profiel verwijderen.
[/quote]

Mja, het gaat er meer om dat men hier dan mijn nummer kan vinden. Of ik er wel/niet ben heb ik uitgezet omdat dat een hoop spam scheelt ;)
En mijn icq staat idd altijd op n/a omdat dat weer een hoop gedoe met allerlei gekke notificaties scheelt :)

Verwijderd

Topicstarter
Op zaterdag 27 april 2002 21:49 schreef ACM het volgende:
Mocht je er nog wat aan hebben, ik heb zelf ook nog een beetje lopen knoeien ermee:
PHP:
1
<?preg_match('_\s(http://(?:\S*)\.(?:gif|jpg|jpeg|png))\s_U', " http://www.tweakers.net/bla.gif ", $matches);print_r($matches);preg_match('_\s(http://(?:\S*)(?<!\.gif|\.jpg|\.png|\.jpeg))\s_U', " http://www.tweakers.net/bla.gif ", $matches);print_r($matches);?>

De eerste matched alles met .gif/etc en stopt het in \1 (te gebruiken bij preg_replace)
De tweede doet het omgekeerde en matched alles zonder .gif/etc als extensie :) (en stopt het in \1 )
Hier zijn uiteraard nog wat varianten op te bedenken voor serieus gebruik :)
Die preg_match() moet ik toch juist niet gebruiken??
Ik weet niet wat de volgende tekens doen: _\s, de combinatie (?:\S*)(?<!\.gif
Ik heb wel weer wat geprobeerd, maar het kwam er niet echt mooi (lees: goed) uit.

Verwijderd

Topicstarter
:) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :)
Ja hoor het is gelukt.
/me is very proud.

Maar er zit nog een klein probleempje in. Als ik in mijn textfield www.yahoo.com in tik, dan doet hij het niet. Als ik eerst een spatie en dan www.yahoo.com in typ, doet hij het wel. Dus hoe zorg ik ervoor dat er in mijn RegEx zoiets komt te staan als spatie? ?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Je moet natuurlijk wel moeite doen mijn regexp even door te nemen dan.

Wat denk je dat de \s betekend? (space-character)
Daarvoor in de plaats gewoon datgene gebruiken wat je zelf nodig hebt.

Verwijderd

Topicstarter
Dit is de code die ik van de aanwijzingen van PHP.net heb gehaald. Ik zou zeggen om nu \s toetevoegen
dat op dezelfde manier te doen als jij deed, maar dat werkte niet echt. Waar zou ik dan /s neer moeten zetten (ik heb al een /i er staan).
PHP:
1
<?$project =preg_replace("/([^\w\/])(www\.[a-z0-9\-]+\.[a-z0-9\-]+)/i","$1http://$2", $project); ?>

Verwijderd

Ik ben zelf nog niet ver genoeg om dit helemaal op te lossen. Heb wel regex gebruikt om te controleren op naam. Duidelijke tutorial hierover kun je hier vinden.

Hoop dat je er wat aan hebt.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

gangster: Zorg ervoor dat het verschil tussen een / en een \ je ten allen tijden duidelijk is. Bij een regexp (en eigenlijk altijd wel) is dat geen triviaal verschil ;)

/s -> multiline mode (en binnen de regexp-delimiters is het een / met een s erachter)
\s -> space character-class...

Verwijderd

Topicstarter
Ik kende die tutorial al wel, maar toen kende ik PHP nog niet erg. Ik zal hem nog eens doorlezen. Ik zag al [:space:] staan en dat is waarschijnlijk hetzelfde als \s.
Misschien kan er in de Faq worden neergezet wat \s \w enz is?

Verwijderd

Topicstarter
/me meldt dat hij het aan de praat heeft *D.
/me meldt dat hij snapt hoe de s werkt
/me meldt dat hij niet weet wat multi-line mode (veel regels mode, dat de ruimte tussen twee tekens meer dan een regel mag zijn :?) is.
/me is nieuwsgierig
/me weet inderdaad hoe /me werkt :z

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op zondag 28 april 2002 21:09 schreef gang-ster het volgende:
/me meldt dat hij niet weet wat multi-line mode (veel regels mode, dat de ruimte tussen twee tekens meer dan een regel mag zijn :?) is.
Normaal werkt multiline-mode WEL met \n's en non-multiline dus niet.
Stel je hebt als string:
code:
1
2
3
4
5
* gang-ster meldt dat hij het aan de praat heeft . 
* gang-ster meldt dat hij snapt hoe de \s werkt
* gang-ster meldt dat hij niet weet wat
* gang-ster is nieuwsgierig
* gang-ster weet inderdaad hoe \/me werkt

En wilt "* gang-ster" matchen, maar dat doe je dmv:
code:
1
'/^*gang-ster (.*)$/'

In multiline mode selecteer je dan ALLES (omdat de . dan ook de \n en/of \r omvat). Zoniet, dan selecteer je alleen de eerste regel.
Een ander verschil is dus dat in het eerste geval ^ ... $ betekend "een regel" en bij multiline betekend het gewoon "begin tot eind".
Pagina: 1