Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[Perl] Regular Expression werkt niet

Gooly
2 antwoorden
  • Ik ben nog maar pas met Perl bezig en van regexen heb ik al helemaal nauwelijks kaas gegeten, maar nu krijg ik er dan toch mee te maken. Probleem is dat ik onderstaande subroutine heb gemaakt die in een while loop door een bestand heen loopt om regel voor regel het formaat te checken. Probleem is dat hij altijd aangeeft dat het formaat niet correct is en ik heb geen idee wat ik fout doe. Volgens mijn tooltje "Regex Coach" is de regular expression (buiten Perl om) helemaal in orde.

    Aangezien ik niet weet of het belangrijk is, is het misschien ook handig om te vermelden dat het input bestand een CSV bestand uit Excel is, dat rechtstreeks naar een Solaris machine wordt ge-FTP't. Het Unxi formaat is wat anders dan het windows formaat, maar ik dacht dat dat met name in de linebreaks zat. Daarom heb ik al de $ op het einde weggelaten, met de bedoeling om in het midden te laten of er wel of geen katakter achteraan komt. Maar misschien heeft dit er ook wel helemaal niks mee te maken.

    [code:1:3a5832b197]
    if ( ! ($line =~ /^[0-9A-Fa-f]{2}-[0-9A-Fa-f]{2}-[0-9A-Fa-f]{2}-[0-9A-Fa-f]{2}-[0-9A-Fa-f]{2}-[0-9A-Fa-f]{2},[0-9A-Fa-f]{16}/))
    { print "Incorrect pattern!";};
    [/code:1:3a5832b197]

    Het input bestand:
    [code:1:3a5832b197]
    e9:e1:72:3a:32:14,a84f26ce12e7ef29
    c3:34:46:c2:7a:c0,9f2a2731443fa3b2
    5d:aa:e6:96:6e:e6,a84f21196af1716a
    etc…
    [/code:1:3a5832b197]
  • Waarom heb je steeds een streepje tussen de waarden staan (-) in plaats van een dubbele punt. Voor zover ik weet stelt een streep op die plek gewoon een letterlijke streep voor (al ben ik ook geen expert op dit onderwerp).

    Verder heb ik gevonden dat je in PERL aan moet geven dat je de regex wil laten matchen.. door m/ te gebruiken. Je regex wordt dan:

    [code:1:5b8804a6ef]
    if ( ! ($line =~ m/^[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2},[0-9A-Fa-f]{16}/))
    { print "Incorrect pattern!";};
    [/code:1:5b8804a6ef]

    Als het niet werkt probeer het dan eens met 1 van de genoemde oplossing ipv allebei..
    Voor de duidelijkheid.. ik heb nog nooit iets met PERL gedaan.

    Hopelijk heb je er wat aan ;)

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.