Avatar billede Slettet bruger
08. maj 2004 - 18:44 Der er 12 kommentarer og
1 løsning

Brug for ekspert hjælp med fejl i min regex.

Hey..

Jeg har lavet en regex til noget scanning af interne sider til mit firma.. det virker for vildt, dog har jeg fundet en meget underlig fejl, som jeg håber i kan hjælpe mig med.

min regex:
-----
<a[\w\d"" =^href]*href[^=]*[^\w/.]*(?<url>[\w/:.-]*\d+[\w/-]*[^.]*.(?<ext>[\w+]+)*)[^>]*>[\w\d ""^<img]*img[\w\d"" =^src]*src[^=]*[^\w./]*(?<urla>[\w/:.-]*\d+[\w/-]*[^.]*.(?<exta>[\w+]+)*)[^>]*>
-----

den crawler nogle sider med links så som denne:
-----
<a href="image/pic01.jpg"><img src="http://intranet.dk/pic01.gif">d</a>
-----
det overstående virker fint sammen, men så begyndte min pc at gå helt amok da den stødte på denne url:

-----
<a href="http://www.localhost.com/214270/1/mangelinksdddd/today/015/">links</a>
-----

det virker som om at jo flere bokstaver som der er der hvor der står 'mangelinksdddd' desto længe tid tager det for den at køre igennem.., og det er i sær noget møg når der f.eks. er 10 af denne slags links på en link side :( piv.
På forhånd tak.
Testkanin
Avatar billede roenving Novice
08. maj 2004 - 19:13 #1
Hrm, den kan jeg ikke umiddelbart komme med et hint til, men jeg kan da påpege, at du bruger noget dobbeltkonfekt, da \w\d to gange henviser til cifre ...

\w = a-z0-9_
\d = 0-9

de steder, jeg er stødt ind i regexps ...
Avatar billede Slettet bruger
09. maj 2004 - 00:13 #2
Jeg må indrømme, at din regexp ser noget besynderlig ud - jeg kan ikke umiddelbart tyde den. Prøv at beskrive præcist (meget gerne med eksempler) hvad du ønsker, den skal matche, og hvad du ønsker, at den ikke skal matche, så kan vi andre måske komme med et forslag, der ikke giver problemer med den slags links.

Det kan måske også hjælpe at vide, hvilket sprog, du skal bruge det til.
Avatar billede roenving Novice
09. maj 2004 - 00:18 #3
Jeg er nu ikke så meget i tvivl om sproget, da forekomster af dobbelte "" helt klart indikerer, at vi er ude i noget vbscript, til gengæld er jeg ikke stødt på variabel-angivelser før, så der er jeg på herrens mark (<url> <ext> <urla> <exta> !-)
Avatar billede Slettet bruger
09. maj 2004 - 00:29 #4
Ja de dobbelte "" fik også mine tanker i retning af VB og afarter af det, så jeg ville nok have gættet på det. Til gengæld så de mystiske bogstavklasser meget underlige ud (Dvs. [\w\d"" =^href]* og lign.)

Jeg blev også forvirret over [\w+]+ foruden dem, du nævnte.

Men jeg vil da stadig tro, at hvis bare vi får at vide nøjagtig hvad testkanin er ude på, så skal det vel nok lykkes for os at få skruet noget sammen. Bare uden den slags mystiske konstruktioner.
Avatar billede roenving Novice
09. maj 2004 - 00:55 #5
Jepz !-)
Avatar billede Slettet bruger
09. maj 2004 - 03:36 #6
hey.. tak for jeres kommentarer.
Jeg udvikler i C#, og de dobbelt " tegn er vist bare mig som har glemt at fjerne den fra da jeg lavede det i vbs.
Formålet med denne regex, er at parse et link som er på et billed, vi har en masse lister internt på voret netværk som ligger i html og det skal jeg nu have parset igennem, og til det har jeg lavet denne.. ja den er meget uoverskuelig og jeg kan selv blive lidt forvirret når jeg kikker på den.
Da jeg ikke ligefrem er haj til C# har jeg fundet frem til lidt her og lidt der, læst om noget et sted og andet et andet sted, og så sat det sammen + lidt ekstra..
Den skal parse et link på denne måde:
<a href="blabla/bla01.jpg><img src="bla/bla01.gif></a>
|<a href=| = jeg skal have fra <a til href=
|blabla/bla01.jpg| = hele stien til det billede jeg skal hente, og der skal vel og mærket være et tal til sidst ellers kan jeg ikke bruge det :) (besværligt ik)
også fil extentions skal jeg have så jeg ved hvilke objekter jeg har med at gøre.
Jeg bruger derfor <group> til at gruppere mine elementer i hvert match, dette gør det lidt lettere at arbejde med.
<img = skal være inde i <a - </a> tagget, ellers har jeg ikke et rigtigt link.
og også i dens src skal der være et tal tilsidst.. ligesom med href stien.
jeg håber at i kan forstå bare lidt at det som jeg har prøvet at forklare.
Det mærkelige er at det køre fint, men hvergang den måde en url som beskrevet i forrige beskrivelse så går min pc i 100% cpu usage, og der står den i lang tid før den endelig kommer videre, så det virker, men går ufatteligt langsomt (med nogle links)
Avatar billede Slettet bruger
09. maj 2004 - 03:37 #7
rettelse:
Da jeg ikke ligefrem er haj til C#

skulle have været

Da jeg ikke ligefrem er haj til regex

men det havde i nok regnet ud :)
Avatar billede Slettet bruger
09. maj 2004 - 16:11 #8
Jeg prøver lige, om jeg kan få det til at virke med de variabelangivelser, men da det er første gang jeg har oplevet dem, vil jeg ikke garantere, at det virker.

<a[\s]+href="(?<url>[^"]+[\d]+\.(?<ext>[a-zA-Z]{1,4}))"[^>]*>[^<]*<img[\s]+src="(?<urla>[^"]+[\d]+\.(?<exta>[a-zA-Z]{1,4}))"[^>]*>[^<]*</a>
Avatar billede Slettet bruger
09. maj 2004 - 16:12 #9
Her kommer den lige igen, bare med et linieskift, så du kan se det hele:

<a[\s]+href="(?<url>[^"]+[\d]+\.(?<ext>[a-zA-Z]{1,4}))"[^>]*>
[^<]*<img[\s]+src="(?<urla>[^"]+[\d]+\.(?<exta>[a-zA-Z]{1,4}))"[^>]*>[^<]*</a>
Avatar billede Slettet bruger
09. maj 2004 - 19:35 #10
hey sandbox, det ser ud til at det virker, jeg tester den og vender tilbage :)
Avatar billede Slettet bruger
14. maj 2004 - 17:49 #11
Virkede det?
Avatar billede Slettet bruger
17. maj 2004 - 07:44 #12
yep det virkede helt fint :) rigtig mange tak, post eventuelt et svar hvis du vil have nogle points :)
Avatar billede Slettet bruger
17. maj 2004 - 15:26 #13
OK, kommer her.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester