Flashback bygger pepparkakshus!
  • 1
  • 2
2006-02-21, 22:57
  #1
Medlem
ToreSkogs avatar
Hur kommer det sig att det inte finns någon tråd om detta?
Jag har sökt men hittar åtminstone ingen.

Jag tänkte att tråden kan innehålla både bidrag och förfrågningar.

Här kommer mina bidrag jag kör C# så metoderna är ju hämtade därifrån, uttrycken är dock kompatibla med alla språk skulle jag tro.
Det är ju det som är poängen med dem.



Den här plockar bort oönskade htmltags ifrån en inskickad datamängd, det är enkelt att lägga till och dra ifrån så man begränsar de taggar men själv vill.
Kod:
Regex.Replace("text från en textbox", @"</?(?i:script|img|embed|object|frameset|frame|iframe|meta|link|style)(.|\n)*?>", "")

Detta sorterar ut jpg-filer som inte börjar på thumb
Kod:
"^[^thumb].*(jpg|JPG)"

Här är ett som stämmer in på alla 4siffriga tal:
Kod:
^\\d\\d\\d\\d$
lätt att variera för att tex sortera ut årtal.

Här finns en liten tutorial för den som vill lära sig vad de olika tecknen betyder:

http://www.castaglia.org/proftpd/doc/contrib/regexp.html

Jag skulle vilja ha hjälp med att bygga ett för följande uppgift:


Man matar in en sträng tex:
C:\mapp\mapp2\mapp3\filnamn.jpg
Sen ut vill man ha:
C:\mapp\mapp2\mapp3\thumb_filnamn.jpg

Om någon kan svara på den frågan blir jag glad (har suttit rätt länge och försökt nu...)
Citera
2006-02-21, 23:05
  #2
Medlem
gregerolles avatar
\\(\w+\.jpg)

filnamnet ligger nu i $1 så då kan du använda:

\thumb_$1

som replacement?


Kanske...
Citera
2006-02-21, 23:12
  #3
Medlem
gregerolles avatar
Citat:
Ursprungligen postat av gregerolle
\\(\w+\.jpg)

filnamnet ligger nu i $1 så då kan du använda:

\thumb_$1

som replacement?


Kanske...

\\(\w+\.jpg)$

kanske är bättre... så matchar den bara slutet.. ifall nån katalog heter blaha.jpg
Citera
2006-02-22, 01:29
  #4
Medlem
Med "sed" går det här:
Kod:
echo 'C:\mapp\mapp2\mapp3\filnamn.jpg' | sed 's/.*\\/&thumb_/'
Funkar iofs inte om det inte finns någon '\' alls i strängen, utan bara 'filnamn.jpg'. Då måste man som alternativ matcha början med '^' eller vad som nu används. Det blir ju också lite dumt om strängen är 'C:\mapp\mapp2\mapp3\', det blir ju 'C:\mapp\mapp2\mapp3\thumb_' av den.

Edit:
Äsch, i gregerolles stil blir det bättre:
Kod:
sed 's/[^\\]*\.jpg/thumb_&/'
Citera
2006-02-22, 10:08
  #5
Medlem
ToreSkogs avatar
Jag skall se om jag kan få till någon av era lösningar, ser ut som att man kan spara någon hundradels millisekund med dem kanske:

Såhär blev det och det funkar felfritt hittentills:
Dubbleringen av "\" är för att C# inte skall flippa ut.

Kod:
string thumbfile = Regex.Replace(pathname, "(\\w+\\.(JPG|jpg))$", "thumb_$1");
Citera
2006-02-22, 17:14
  #6
Medlem
gregerolles avatar
Citat:
Ursprungligen postat av ToreSkog
Jag skall se om jag kan få till någon av era lösningar, ser ut som att man kan spara någon hundradels millisekund med dem kanske:

Såhär blev det och det funkar felfritt hittentills:
Dubbleringen av "\" är för att C# inte skall flippa ut.

Kod:
string thumbfile = Regex.Replace(pathname, "(\\w+\\.(JPG|jpg))$", "thumb_$1");

C# Tips:

Skriv @ före fnuttarna så slipper du dubblera backslash:

string thumbfile = Regex.Replace(pathname, @"(\w+\.(JPG|jpg))$", "thumb_$1");
Citera
2006-03-06, 19:12
  #7
Medlem
Seagates avatar
Har jag gjort rätt här?

Kod:
/[^0-9a-z]/

Betyder detta att den skall plocka ut alla tecken i målet som INTE är 0-9 eller a-z? Eller har jag gjort något fel?

Och hur gör jag den case insensitive?

--

Ps. En länk till någon sida med en bra guide i Regular Expressions (PCRE) - med många exempel - vore ju kanon.

Med Google får jag inte fram något vettigt. Värdelösa guider hela bunten och de saknar helt och hållet exempel.

// Farbror Seagate
Citera
2006-03-06, 20:00
  #8
Medlem
Citat:
Ursprungligen postat av Seagate
Har jag gjort rätt här?

Kod:
/[^0-9a-z]/

Betyder detta att den skall plocka ut alla tecken i målet som INTE är 0-9 eller a-z? Eller har jag gjort något fel?
Det där matchar ett tecken som inte är 0-9 eller a-z, ja. Vill du hitta en följd av dem på en gång, så gör du
Kod:
/[^0-9a-z]+/
så vitt jag vet.
Citat:
Och hur gör jag den case insensitive?
Kod:
/[^0-9a-zA-Z]/
Citera
2006-03-06, 20:14
  #9
Medlem
m0gs avatar
Citat:
Ursprungligen postat av Katalysator
Kod:
/[^0-9a-zA-Z]/

är jag helt åt skogen om jag har för mig att det räcker att sätta ett i efter uttrycket?

dvs
Kod:
/[^0-9a-z]/i
Citera
2006-03-06, 20:16
  #10
Medlem
^swestres^s avatar
Så är det i Perl iaf. Fast perl RE motor är väl lite speciell, så jag vet ej om det är universellt.
Citera
2006-03-06, 20:20
  #11
Medlem
Seagates avatar
Citat:
Ursprungligen postat av Katalysator
Det där matchar ett tecken som inte är 0-9 eller a-z, ja. Vill du hitta en följd av dem på en gång, så gör du
Kod:
/[^0-9a-z]+/
så vitt jag vet.

Vad menar du med en följd? Det jag vill göra är en

Kod:
$pattern = ????

$newstring preg_replace($pattern""$target); 

Eller för att ta det på svenska, jag planerar att radera alla tecken i en sträng som inte håller sig inom min vitlista (a-z och 0-9).

Vilken av metoderna skall jag då använda, din eller min? Och vad är skillnaden mellan metoderna? (Följd och icke-följd).

// Farbror Seagate
Citera
2006-03-06, 20:38
  #12
Medlem
Citat:
Ursprungligen postat av Seagate
Vad menar du med en följd? Det jag vill göra är en

Kod:
$pattern = ????

$newstring preg_replace($pattern""$target); 

Eller för att ta det på svenska, jag planerar att radera alla tecken i en sträng som inte håller sig inom min vitlista (a-z och 0-9).

Vilken av metoderna skall jag då använda, din eller min? Och vad är skillnaden mellan metoderna? (Följd och icke-följd).

// Farbror Seagate

Det blir väl samma sak på slutet, mest en smaksak i detta fall.

Säg att vi har en sträng "abåäöc". [^0-9a-z] matchar då först "å", sedan "ä" osv,
medan [^0-9a-z]+ matchar "åäö" i ett nafs. Plusset betyder alltså "en eller flera
av det föregående".

För övrigt så finns det flera varianter av "regexps"; Unix/Perl/POSIX/...,
så ta exemplen med en nypa salt.
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in