[PHP] regex aliassen uit query

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste,

Ik heb een vraagje over regualr expressions.
Ik probeer uit een query de aliassen van een tabel te halen

code:
1
2
3
4
5
6
7
SELECT
    a.id,
    a.name,
    if(isNULL(a.account),a.id,CONCAT(a.id,':',a.account)) as nr,
    a.status
FROM
    syntec_partner as a


Nu haal ik eerst de velden uit de query met het volgende patroon
code:
1
/SELECT(.*)FROM/is


Daarna wil ik ik dus eigenlijk spillten op de "," (komma)
Echter bij het gebruik van MySQL functies loop ik vast.

Dus ik dacht zoiets als die functies replacen door "" met een regex zoiets als
code:
1
2
3
/ISNULL\((.*?.\))/is
/CONCAT\((.*?.\))/is
/IF\((.*?.\))/is


Echter als ik de volgorde verkeerd doe dan werkt dit dus niet
Is er ook een mogelijkheid om te zien of er een functie in een functie zit met regex
:?

Acties:
  • 0 Henk 'm!

Verwijderd

Recursie en regular expressions gaan vaak slecht samen. Wat je hier eigenlijk moet hebben is een lexical scanner om deze query te tokenizen en het type van elke token te bepalen, en een parser om deze tokens in de juiste context te kunnen plaatsen. Een heel eenvoudige oplossing zal er waarschijnlijk niet zijn.

Acties:
  • 0 Henk 'm!

  • akaIDIOT
  • Registratie: Januari 2005
  • Laatst online: 06-08 18:13
Wat bedoel je met aliasen van een tabel?

Als je de AS-clauses bedoelt, kan je je dan niet preg_splitten op /(AS|\\s+)/i, uitgaande van het feit dat je de SELECT en WHERE-clauses er eerst af peutert.

If not, disregard this reply ;)

*stu!ter* *boink*


Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 13-09 20:30

kokx

WIN

Een taal als SQL valt meestal niet goed te splitten met regexes. Hoe denk je bijvoorbeeld dat MySQL dat zelf doet? Dat doen ze inderdaad met een lexical scanner, oftewel ze gaan de query tokenizen. Zoiets kun je makkelijk zelf schrijven, maar waarschijnlijk is dat al gedaan:

http://www.google.nl/sear...&btnG=Google+zoeken&meta=

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ah bedankt iedereen, goed, ik liep idd dus vast met regexes..
Bedankt voor de link kokx...gaat ik weer mee verder.