Jag håller på och utvecklar en databas och nu har jag väderdata som jag tänkte lägga in i databasen med hjälp av PHP. Denna data (METAR) kommer ursprungligen från Luftfartsverkets hemsida och uppdateras en gång varje halvtimme.
METAR används av luftfarten och talar om hur vädret är på en viss flygplats avseende vind, temperatur, lufttryck, molnbas etc. Det jag vill göra är att extrahera exempelvis den första posten som börjar med ESDF (Ronneby) och sedan spara all efterföljande information i en sträng tills ett "="-tecken påträffas. "="-tecknet talar om att METARN är slut och korrekt för den flygplatsen. Sedan vill jag att detta upprepas för alla efterföljande poster tills slutet på listan är nådd.
Någon som har några "hintar" eller om möjligt kan skicka mig vidare i rätt riktning? :)
Mina hårstrån håller på att bli gråa av allt funderande! :) Jag försöker skapa ett reguljärt uttryck som splittar upp textmassan ovan till en vektor med innehållet ESDF 172120Z 27006KT 230V350 4700 BR SCT003 BKN008 OVC010 06/05 Q1007=. Det vill säga allt från de fyra stora bokstäverna till "="-tecknet. Någon som vet hur man skulle kunna skriva?
Jag prövade uttrycket på en testsida och det fungerade bra. Dock skulle jag helst vilja att det fanns en begränsning att identifieraren (ex. ESFD) bara får innehålla fyra tecken samt att uttrycket även ska tillåta andra bokstäver ibörjan än bara ES... men det kanske är en senare fråga :) Tack ändå!
Jag använde mig av detta program för att testa att extrahera information med ovanstående uttryck. Jag förstår problematiken med att du endast fick ut de som började med ES eftersom låter man den plocka ut information med 4 stora bokstäver får man även med ord som "LESS" och "THAN".
Då tänkte jag så här. Kan man inte ange i uttrycket att ordet med 4 stora bokstäver som ska extraheras skall komma direkt efter ett "="-tecken. Då borde man väl få ut samtliga poster.
Nu räknade jag det till att jag hade fått ut ca 30 poster av totalt 38... :)
"[\r\n]{1,2}" : matchar en radbrytning som kan vara \r , \n eller \r\n beroende på operativsystem
".+?=" : matchar ett eller flera tecken fram tills det första = tecknet. Tack vare "?" så matchas så få tecken som möjligt istället för så många som möjligt (då skulle nämligen allt t.o.m. det sista "=" hamna i en sträng).
Punkten matchar normalt inte radbrytningstecken men i detta fall gör den det p.g.a. ett "s" på slutet.
Jag förutsätter nämligen att du vill att t.ex. allt detta:
ESSP 172120Z 36006KT 9999 BKN015 00/M02 Q1007 RWY 27 WET 51-100 PCT
LESS THAN 1 MM BA78=