Permalänk

Hälp med en regexp

Jag använder php och har en lång text där jag vill få ut ett talet som finns i texten och som är omgiven av följande:

massa annan skit<stat>Antal sålda<item>1234</item></stat>mer annat

1234 är vad jag vill få ut och det kan variera från 0 till oändligheten

preg_match är det väl som gäller, men jag vet inte hur man formar ens såhär enkla uttryck och de tutorials jag finner är inte särksilt bra.

Permalänk
Legendarisk

#<item>\d+</item>#i

Det där fungerar så länge det alltid finns en siffra inuti <item>-tagen.

Ex:
preg_match('#<item>\d+</item>#i','massa annan skit<stat>Antal sålda<item>1234</item></stat>mer annat',$arr);

$arr[0] = 1234.

Visa signatur

Abstractions all the way down.

Permalänk
Citat:

Ursprungligen inskrivet av Biber
#<item>\d+</item>#i

Det där fungerar så länge det alltid finns en siffra inuti <item>-tagen.

Ex:
preg_match('#<item>\d+</item>#i','massa annan skit<stat>Antal sålda<item>1234</item></stat>mer annat',$arr);

$arr[0] = 1234.

Tack för ruggigt snabbt svar, doch fungerar det inte riktigt som tänkt, det är viktigt att det andra stämmer också det räcker inte med att det står inom itemtaggar, jag modiferade din kod lite och fick följande;

preg_match('#<stat>Antal sålda: <item>\d+</item>#i',"$read",$arr);

Denna matar ut;

"Antal sålda: 1234"

Hur ändrar jag så den bara matar ut själva värdet och inte texten?

Permalänk
Hedersmedlem

Biber, det där fungerar inte, [0] innehåller hela strängen, det du vill ha är [1] som inte existerar eftersom att du inte valde någon grupp, så här ska det vara:

preg_match('#<item>(\d+)</item>#i', $var, $matches); echo $matches[1]; // Skriver ut 1234

Du kan självklart ändra $var till vad som helst, det är strängen som matchningen körs på.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Legendarisk

Då borde det här fungera:
preg_match('#<stat>Antal sålda: <item>(\d+)</item></stat>#i','massa annan skit<stat>Antal sålda: <item>1234</item></stat>mer annat',$arr);

$arr[1] = 1234.

Glömde lägga () runt \d+ förut.

edit: m0REc upptäckte det visst först.

Visa signatur

Abstractions all the way down.

Permalänk

Verkar funka fint, tacktack. Ska ta mig tid att lära detta så snart jag kan, Lär vara riktigt behändigt att kunna