lørdag, januar 23, 2021

RegEx hjælp

Daily Rush Debat Programmering RegEx hjælp

  • Dette indlæg indeholder 8 kommentarer, har 6 deltagere og blev senest opdateret af  hausner for 13 år siden.
  • Forfatter
    Emne
  • #0

    hausner
    Moderator
    17.185 indlæg
    Offline

    Hej Drenge

    Jeg har et Regular Expressions som skal modificeres og jeg har aldrig fået sat mig ind i det. Jeg ville også helst undgå det nu, hvorfor jeg vender mig mod DailyRush.

    string regex = @”]*?HREF\s*=\s*[“”‘]?([^'”” >]+?)[ ‘””]?>”;

    Ovenstående RegEx finder alle html links i en simpel html side. Det jeg ønsker at ændre den til er at finde alle link paths istedet. Altså uden filnavnet.

    På forhånd tak for hjælpen.

    Planter er fascinerende

Viser 8 kommentarer - 1 til 8 (af 8 i alt)
  • Forfatter
    Kommentarer
  • #1

    esbenboye
    Bruger
    552 indlæg
    Offline

    Jeg har lige kigget lidt på og kan ikke helt gennemskue hvordan det skal gøres, men hvis du prøver at søge på exp.dk eller lave et spørgsmål derinde, så er jeg sikker på at der nok er en der kan svare på det

    #2

    kaffekop
    Bruger
    755 indlæg
    Offline

    Har du prøvet med http://weitz.de/regex-coach/ ? Lidt nemmere at sidde med det fremfor at reloade sit script hele tiden

    (http|https|ftp)://([a-zA-Z0-9-\.]+)
    =
    http://www.url.tld
    ud fra
    [a href=”http://www.url.tld”>adad[/a>

    Men det er vel ikke helt nok..

    \\o/ --{ kaf kaf kaf kaf kaf kaf kaf kaf kaf kaf kaf kaf ! }

    #3

    hausner
    Moderator
    17.185 indlæg
    Offline

    Det jeg ønsker at komme fra og til er følgende:

    http://www.url.dk/folder1/folder2/filnavn.jpg

    ->

    http://www.url.dk/folder1/folder2/

    Jeg ønsker at finde alle html links (det kan RegEx’et i #0) men uden selve filnavnet.

    Planter er fascinerende

    #4

    hausner
    Moderator
    17.185 indlæg
    Offline

    Jeg overvejer lidt om jeg bare skal parse lidt på de værdier som regex’ed finder istedet for selvom det ikke er så pænt.

    Planter er fascinerende

    #5

    CrackMaND
    Bruger
    1.078 indlæg
    Offline

    #5 den løsning har jeg en stærk tendens et benytte, selvom jeg ved at RegEx kan klare jobbet væsentligt mere effektivt. Syns bare RegEx er så forbandet kryptiske at læse/forstå/kode.

    May the source be with you

    #6

    Rats
    Bruger
    341 indlæg
    Offline

    I C# kan du klare dig med
    “http://(([a-z]|[A-Z]|[0-9]|[= :/.,\\\”‘#&_])*/)*”

    Du ønsker at genkende alle strenge der starter med “http://” efterfølgende af
    nul eller flere forekomster af tegn :
    (([a-z]|[A-Z]|[0-9]|[= :/.,\\\”‘#&_])*
    der slutter med “/”. Du kan evt. bruge + i stedet for * hvis du vil have minimum ét tegn før hver obligatoriske “/”. Ved ikke om det er nødvendigt at tage højde for om det er html-links eller om alle http-adresser skal gælde.

    N.B hvis du skal kode i php eller andet skal du nok ignorere de ekstra \ som escapekarakterer.

    #7

    Munter
    Bruger
    2.473 indlæg
    Offline

    Tag resultatet af din nuværende regex og kør denne regex:

    [^/]*/

    Det er langt lettere at læse på to regexes end en enkelt.

    Derudover kan jeg sige at med hensyn til html er regexes faktisk umulige at lave præcise nok. Du skal hellere bruge noget som faktisk parser html’en til et DOM træ og traversere igennem det. Der findes en række perl moduler hetil. Det er klart det sikreste.

    "Everybody wants to laugh but nobody wants to cry, Everybody wants to go to heaven... but nobody wants to die!"--Larry Howard

    #8

    hausner
    Moderator
    17.185 indlæg
    Offline

    #7

    Jeg prøver med en dobbelt regex imorgen. Det kunne også være vejen frem.

    Med hensyn til hvor nøjagtig metoden er, er det knap så vigtigt. Det er ikke super avanceret html der skal igennem kværnen, så det er ikke noget problem.

    Planter er fascinerende

Viser 8 kommentarer - 1 til 8 (af 8 i alt)
  • Du skal være logget ind for at kommentere på dette indlæg.