Permalänk
Medlem

Hjälp med Regex

Tjena Swec,

Låt säga jag har 2 text filer

Den första textfilen innehåller:

test1/s68ft435sZ/test1.html
test1/326jdJKR/test21567.html
test1/srKEwj6j/test2346.html
test1/543ksKRsD/test12412.html
test1/46k2jnEkfN/test4127.html

etc..

Den andra innehåller:

test2/543k5Kn4ND/test1.html
test2/o4k2KsszZG/test21567.html
test2/64Ji432sY/test2346.html
test2/643673dss/test12412.html
test2/4126kj32s/test4127.html

tittar vi närmare på en av strängarna så ser vi:

test1/ <-- del1: denna delen är statisk, och ändras ändast mellan de 2 filerna

s68ft435sZ/ <-- del2: midden delen är random på båda filerna

test1.html <-- del3: är den samma mellan båda filerna och borde kunna användas som ankare för att köra ett regex replacement

Det jag vill ådstakomma är:

Skriva över text fil 1 (den övre presentationen) med del1 och del2 av den undre text filens data, och matcha dessa genom del3 eftersom den är statisk.

Hur kan jag ådstakomma detta på enklaste sett? några ideer?

Permalänk
Medlem

Vill du BARA ha det som matchar från fil2 kvar (det låter så "Skriva över text fil 1 (den övre presentationen) med del1 och del2 av den undra text filens data")?
Eller skall det som inte matchar från den andra filen vara kvar oförändrat?

Permalänk
Medlem

jag vill skriva över den övre filens data med del 1 och del 2 av den undre filens data, och de skalll matchas genom del3

vad som kvarstår i fil 2 spelar ingen roll bara fil1 är uppdaterad med nya datan.

Permalänk
Medlem

matchstrings=$(awk -F"/" '{print $3}' fil1) && matchdata=$(for a in $matchstrings; do grep $a fil2; done;) && echo "$matchdata" |awk -F "/" '{print $1 "/" $2}' >nyfil

output i filen "nyfil" blir då.
test2/543k5Kn4ND
test2/o4k2KsszZG
test2/64Ji432sY
test2/643673dss
test2/4126kj32s

Om du faktiskt ville ha med del3 också så är det ju bara att lägga till men du skrev "skriva över den övre filens data med del 1 och del 2 av den undre filens data". Dessutom smidigare skriva till en ny fil än att ta sönder den gamla, antar jag.

Att göra detta med en ren find and replace med en enda regexp går nog inte, då du först måste extrahera det som skall matchas rad för rad?

Permalänk
Medlem

Intressant, en bit på vägen! behöver ha med del3 också, denna regex körs med php?

det bästa är om fil1 kan bli modifierad enligt specifikationen, dvs ersätta del 1 del2 och behålla del3

och matcha via del3 från fil2 datan

jag är ingen kodare i grunden men har suttit lite med php, kan du ge exempel på hur detta kan köras i php?

tack för hjälpen!

Permalänk
Medlem

Här är om du skall ha med del3 och skriva över fil1.

matchstrings=$(awk -F"/" '{print $3}' fil1) && matchdata=$(for a in $matchstrings; do grep $a fil2; done;) && echo "$matchdata" |awk -F "/" '{print $1 "/" $2 "/" $3}' >fil1

Detta är inte php, och inte regexp heller, utan bash och awk (linux shellscript).
(Du kan antagligen köra det och få outputi php på en linuxmaskin med http://php.net/manual/en/function.shell-exec.php, men det blir nog mest onödigt).
Om du inte har en mac/linux så kan du installera en linux VM, är trots allt gratis. Eller köra det i cygwin under windows.

Permalänk
Medlem

Tack så mycket, ska expermientera lite med detta!