[php] Regex vanaf achter beginnen

Pagina: 1
Acties:

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Misschien een beetje vage topic, maar wat ik zoek is dit:
Ik heb een regex en die zit er zo uit:
PHP:
1
2
3
<?
$regex = "/<a href='(*.?)'>(*.?)<\/a>/";
?>

Dit werkt perfect, maar nou wil ik hem wat perfectioneren, in de titel van deze link staat namelijk altijd iets tussen haakjes "(" en ")". Dit wil ik er ook uit halen, maar dan alleen wat als laaste tussen haakjes staat.
Voorbeeld:
<a href='www.test.com/path/file'>Test titel (test1) (test2)</a>

Wat ie er nou uit moet halen is dit:
- www.test.com/path/file
- Test titel (test1)
- (test2)

Ik dacht ik doe zoiets als dit:
PHP:
1
2
3
<?
$regex = "/<a href='(*.?)'>(*.?) \((*.?)\)<\/a>/";
?>

Maar dan pakt ie in het voorbeeld hierboven de "test1" als 3e match. Hij moet dus eigenlijk vanaf achter beginnen met die haakjes. Iemand een idee hoe dit moet?

Alvast bedankt.

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Weet iemand hoe dit moet?

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Is dit niet mogelijk met een regex? Moet ik misschien dan zelf een functie maken die het op een andere manier doet?
Iemand?

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

imo kun je beter sprintf gebruiken hiervoor

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


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Op woensdag 12 september 2001 10:28 schreef drm het volgende:
imo kun je beter sprintf gebruiken hiervoor
Ik heb even gekeken naar die functie, maar ik snap niet precies hoe ik die functie moet toepassen om mijn probleem op te lossen.

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

|:( Sorry, ik dacht precies de andere kant op |:(
never mind...

Je bedoelt dit:
code:
1
<a href="http://www.sjaak.nl/index.html">Sjaak.nl: uw adviseur wat betreft bevers (holland) (bla)</a>

en dan "http://www.sjaak.nl" en "(bla)" als resultaat hebben?

Had iets te maken met greediness, dacht ik. Stond laatst nog een topic over (ben zelf niet zo'n regexpert)

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


  • Grum
  • Registratie: Juni 2001
  • Niet online
PHP:
1
2
3
<?
$regex = '!<a href=\'(*.?)\'>(*.?) \((.*?)\)</a>!';
?>

lijkt mij :P

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Op woensdag 12 september 2001 11:05 schreef Grum_ het volgende:
PHP:
1
2
3
<?
$regex = '!<a href=\'(*.?)\'>(*.?) \((.*?)\)</a>!';
?>

lijkt mij :P
Volgens mij pakt ie dan het eerste wat tussen "(" en ")" staat.
Dus als dit het voorbeeld is:

<a href='www.test.com/path/file'>Test titel (test1) (test2)</a>

Dan pakt ie:
- www.test.com/path/file
- Test titel
- test1

en test2 laat ie helemaal vallen.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Ik weet niks van hoe php met regexes omgaat, maar dit stukje perl code:
code:
1
print join ("\n", ("<a href='www.test.com/path/file'>Test titel (test1) (test2)</a>" =~ /<a href='(.*?)'>([^(]*).*\((.*?)\)<\/a>/));

produceert dit resultaat:
www.test.com/path/file
Test titel
test2
Voor de niet-perlers onder ons, dit is dus mijn regex:
code:
1
<a href='(.*?)'>([^(]*D.*\((.*?)\)<\/a>

Ik denk dattie wel POSIX is.
Pagina: 1