[php/regexp] x ste instantie van een woord vinden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb de volgende string waar ik iets in wil zoeken:

<Row ss:Height="12.75">
<Cell ss:StyleID="s114">
<Data ss:Type="Number">23536</Data>
<NamedCell ss:Name="Print_Area" />
</Cell>
<Cell ss:StyleID="s74">
<Data ss:Type="String">test</Data>
<NamedCell ss:Name="Print_Area" />
</Cell>
<Cell ss:StyleID="s96">
<Data ss:Type="Number">43.308</Data>
<NamedCell ss:Name="Print_Area" />
</Cell>
<Cell ss:StyleID="s77">
<Data ss:Type="Number">42.104999999999997</Data>
<NamedCell ss:Name="Print_Area" />
</Cell>

Nu zoek ik hierin met een regexp naar 23536, dan wil ik test eruit kunnen halen en 43.308. Ik weet niet hoe ik moet opgeven dat na 23536 alles mag totdat hij voor de tweede keer <Data ss:Type="number"> tegenkomt.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Zou je een beetje kunnen indenten en code tags kunnen gebruiken? Dan zou het wat duidelijker zijn.

Verder raad ik je aan om eens te kijken naar xml parsers, want dit lijkt, of andersgezegd: is goede XML. Alleen een doctype toevoegen en je bent klaar.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Daar zat ik ook over na te denken, echter komt het bovenstaande uit een excel bestand en is het nogal ranzig. Het leek me makkelijker om met regex de juiste waarde eruit te halen

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik gebruik nu:
code:
1
$search = preg_match("/(".$result[$i]['artlev'].")<\/data>(.)*<\/data>/i", $bascontent, $basar);


De .* tussen de twee data tags zou nu toch in de basar array moeten zitten? Dit doet hij niet.

[ Voor 41% gewijzigd door Verwijderd op 14-01-2004 19:28 ]


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
(.*)
Anders, staat er maar één char in je array. Nu match je één karakter dat meer van één keer voorkomt.

Je vindt je data in $basar[2].

Gebruik eventueel iets als (\d+\.?\d*) om floats te matchen

[ Voor 63% gewijzigd door Skaah op 14-01-2004 19:48 ]


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
quote en edit...

[ Voor 92% gewijzigd door Skaah op 14-01-2004 19:48 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb nu:
code:
1
$search = preg_match("/(".$result[$i]['artlev'].")<\/data>(.|\n)*?Type=\"String\">(.*)<\/data>(.|\n)*?Type=\"number\">(.*)<\/data>/i", $bascontent, $basar);


Maar in de $basar worden nu ook de waarden van .|\n weergegeven. Logisch, want deze staan ook tussen (). Dit heb ik gedaan omdat hij meerdere keren (*) een . of een \n mag vinden. Kan dit ook anders zodat dit niet in de array terecht komt?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Na veel prutser is het me gelukt echter nog niet helemaal. Ik moet nu in het bestand zoeken naar een stukje "1))" zonder quotes. In mijn regex (preg) zoek ik naar 1\)\)

Dit werkt niet. \1\)\) werkt ook niet.

Weet iemand hoe ik een ) moet escapen?
Pagina: 1