[PHP/REGEX] Substring uit string halen

Pagina: 1
Acties:
  • 129 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hi, ik zoek een regex om het volgende te doen met een string, de string die ik heb is:

blabla1.blabla2.blabla3=blabla

nu wil ik eigenlijk alleen blabla3 hebben.

Ik dacht dit op te lossen met:

PHP:
1
$substring = preg_match("[.][A-Za-z-0-9]*[=]", $string);


Aangezien ik niet zo thuis ben in Regex'en, dacht ik dat de [,] zocht op een punt gevolgd door een willekeurig aantal karakters gevolgd door een = ([=]). Blijkbaar doe ik iets fout. Heb al op de regextutorial gekeken, maar werd niet echt duidelijker.

Acties:
  • 0 Henk 'm!

  • Piels
  • Registratie: Maart 2001
  • Laatst online: 25-08 15:44
Je manier van denken is goed :) Maar wil je zoeken op een . dan moet je gebruik maken van een escape caracter, dus zoiets als [\.]

Ik zou eens gaan proberen met ereg wat de output is van je regex. Met ereg kun je handig de resultaten van je regex in een array stoppen om deze later uit te poepen om te kijken of je op de goede weg bent. :)

Windows Phone Apps: Belstatus, Pinautomaten


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Piels schreef op vrijdag 09 februari 2007 @ 13:09:
Je manier van denken is goed :) Maar wil je zoeken op een . dan moet je gebruik maken van een escape caracter, dus zoiets als [\.]
In een character class hoeft dat voor de punt niet, AFAIK. :)
Ik zou eens gaan proberen met ereg wat de output is van je regex. Met ereg kun je handig de resultaten van je regex in een array stoppen om deze later uit te poepen om te kijken of je op de goede weg bent. :)
Waarom ereg? Met PCRE kan dat net zo goed als met POSIX? :)

Het gaat fout met die regexp omdat er geen delimiter in zit en er nog wat andere dingen niet optimaal zijn. Ik zou gaan voor iets als dit:
PHP:
1
2
preg_match("/\.([a-z]+[0-9])=/iU", $string, $matches);
print_r($matches);

De array $matches zou dan je string moeten bevatten. Wanneer het getal achter blabla (in dit geval dus een 3) groter kan zijn dan 9, dan moet er ook nog een + achter de [0-9] char class. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

verder mis ik de delimiters en geeft preg_match geen match terug maar een matchcount. Dit zou moeten werken:
PHP:
1
2
if (preg_match('/\.(\w+)=/', $string, $match))
  echo $match[1];


edit: /laat :P

[ Voor 4% gewijzigd door crisp op 09-02-2007 13:19 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt allemaal, heb hem meer op die van Crisp gebaseerd, heb nu:

/\..*=/iU

nu alleen nog hetvolgende, is het ook mogelijk om met de regex te zeggen, okee ik wil het stuk hebben tussen die . en de =?

Nu krijg ik namelijk .blabla3=

dat scheelt natuurlijk al, maar liever heb ik in 1x het goede stuk.

edit: die van crisp was toch beter :), die van mij pakte teveel!

[ Voor 9% gewijzigd door Verwijderd op 09-02-2007 13:45 ]


Acties:
  • 0 Henk 'm!

  • xces
  • Registratie: Juli 2001
  • Laatst online: 20-09 16:56

xces

To got or not to got..

PHP:
1
2
preg_match("/(\.)([a-z]+[0-9])(=)/iU", $string, $matches); 
print_r($matches);

:D
Pagina: 1