Har en "datablob" med information som jag vill splitta upp i lämpliga bitar och mata in i en databas Någon sa: Om du har ett problem och tänker lösa det med regexp så har du 2 problem. <b>Någon sa: Om du har ett problem och tänker lösa det med regexp så har du 2 problem.</b> Kan rekommendera följande regex verktygsplitta sträng
problemet gäller att fälten är kommaseparerade, men vissa fält kan innehålla kommatecken, dock i så fall så att hela fältet finns innanför singlequotes..
Kan man göra detta någotsånär smidigt med regexps eller borde jag genast ta fram storsläggan och hitta en riktig parser, alternativt själv gå igenom grejen tecken för tecken och splitta?
suggestions?
Vill alltså splitta på kommatecken som inte är omslutna av singlequotes
ex. följande exempel ska bli till 5 fält
2, 'bar', 'blarg, zoo', 1, 'hmm\'s foo' Sv: splitta sträng
Följande regexp fungerar
(?:^|,)\s*((?:[^',])*|'(?:[^']|\\')*')\s*(?=,|$)
men du måste ändå:
- använda sub-expression 1
- ta bort inledande och avslutande ' respektive avslutande blanka
- ta bort \' inne i texten
Förklaring till regexp:en
(?:^|,) xxx (?=,|$) Matcha det som står mellan kommatecken eller i början eller slutet
xxx ovan kan antingen vara
'text' där text kan innehålla allt utom ' som inte föregås av \ dvs [^']|\\'
eller vad som helst som inte innehåller kommatecken eller ' dvs [^',]Sv:splitta sträng
heh ..alltför ofta ser man folk som vill använda regexps till fel saker.. detta är antagligen också ett sånt..
<b>(?:^|,)\s*((?:[^',])*|'(?:[^']|\\')*')\s*(?=,|$)</b>
tja.. det där ser inte direkt "någotsånär smidigt" ut, snarare som en harang med svordomar i nån serietidning :)
..tror att jag ändå själv går igenom tecken för tecken, (för att kunna underhålla programmet sen..)
men tack för svaret!Sv: splitta sträng
http://www.ultrapico.com/Expresso.htm
Bland annat så omvandlar det regex uttryck till en trädstruktur vilket gör det hysat enkelt att förstå vad som händer.
En bra regextutorial följer med också.