Dracherl: regexp ausschließlichkeit

Hallo
Ich möchte ein Formularfeld abprüfen
In diesem sollen ausschließlich Zeichenketten des Musters
\w\w\w\w\b
vorkommen.

Dies
$a =~ /^\w{4}\b/g
prüft aber natürlich nur ob es einmal vorkommt - mein Prob ist - es soll
nichts anderes als genau diese Muster vorkommen ...

Hintergrund (wen's interessiert):
Es geht um eine Liste von Flughäfen deren "ICAO"-Code
(internationaler Kurzbezeichner) aus genau vier Zeichen besteht
eddf=frankfurt/M, essa=Stockholm Arlanda, egll=London Heathrow etc.

Hinterher wird ein Array draus - ich könnte es auch umständlich hinkriegen.
Aber das muß doch schneller gehen ... ich wälz hier Bücher,
aber bin nicht fündig geworden
;(
Danke!

  1. hi!

    Ich möchte ein Formularfeld abprüfen
    In diesem sollen ausschließlich Zeichenketten des Musters
    \w\w\w\w\b
    vorkommen.

    Man könnte es vielleicht ungefähr so lösen:

    === cut ===
    my $input = "aaaa bbbb cccc";
    $result = grep { !/^\w{4}$/ } split / /, $input;
    === cut ===

    In $result steht anschließend die Anzahl der Codes, die nicht mit dem
    gewünschten Format übereinstimmen.

    Erläuterung: split trennt die Eingabe an Leerzeichen auf. Dort kannst
    du natürlich auch jedes andere Trennzeichen einsetzen, wenn du andere
    benötigst. grep sucht anschließend alle Codes, die nicht dem regulären
    Ausdruck in den geschweiften Klammern entsprechen. Im skalaren Kontext
    liefert das die Anzahl dieser Elemente. Wenn $result also am Ende 0
    ist, enthält deine Eingabe nur erlaubte Codes, ansonsten enthält
    $result die Anzahl der unerlaubten Codes.

    Wenn du $result durch @result ersetzt, erhälst du ein Array der falsch
    formatierten Codes.

    bye, Frank!

    --
    Never argue with an idiot. He will lower you to his level and then
    beat you with experience.
    1. === cut ===
      my $input = "aaaa bbbb cccc";
      $result = grep { !/^\w{4}$/ } split / /, $input;
      === cut ===

      thx - aber das war was ich mit "umständlich" meinte.
      den split brauch ich für die liste später eh.

      Ich dachte an etwas in der Form wie ich Zeichenklassen mit [^äöü]
      ausschließen kann,
      etwas wie

      /[^(\w{4}\b)]/g

      oder so ähnlich (das funktioniert so nicht - weiß ich)

      Sprich so wie man
      nach "etwas" sucht möchte ich nach 'etwas, das anders ist als "etwas"' suchen

  2. Hallo Dracherl,

    Dies
    $a =~ /^\w{4}\b/g
    prüft aber natürlich nur ob es einmal
    vorkommt - mein Prob ist - es soll
    nichts anderes als genau diese Muster
    vorkommen ...

    Dann mach das doch so:

    if($a !~ m/^\w{4}\b(\w{4}\b)*$/) {
      die 'Du Sack!';
    }

    Gruesse,
     CK

    --
    Nichts zu begehren, dass ist der Weg.
    1. if($a !~ m/^\w{4}\b(\w{4}\b)*$/) {
        die 'Du Sack!';
      }

      Funkst net ;(

      "aaaa aaaa" matched net

      #!/usr/bin/perl
      use strict;

      my $a;
      while($a ne "quit" || $a ne "bye"){
       print "String eingeben !\n";
       $a = <STDIN>;
       chop($a);
       if($a !~ m/^\w{4}\b(\w{4}\b)*$/) {print "\n '$a' Passt nicht ! \n";}
       else{print "\n '$a' Passt ! \n";}
      }
      exit;

      1. Hallo Dracherl,

        if($a !~ m/^\w{4}\b(\w{4}\b)*$/) {
          die 'Du Sack!';
        }

        Funkst net ;(

        "aaaa aaaa" matched net

        Natuerlich nicht. Du hast nix von
        Leerzeichen gesagt ;) Laesst sich aber
        leicht einfuegen:

        if($a !~ m/^\w{4}( \w{4})*$/) {
          die 'Du Sack!';
        }

        Gruesse,
         CK

        --
        Ich bewundere wirklich den Sinn der Bienen für kollektive Verantwortung. Obwohl sich einzelne Bienen hin und wieder bekämpfen, herrscht zwischen Ihnen grundsätzlich ein starkes Gefühl für Eintracht und Zusammenarbeit. Wir Menschen gelten als sehr viel weiter entwickelt, doch mitunter rangieren wir sogar hinter kleinen Insekten.
        1. Natuerlich nicht. Du hast nix von
          Leerzeichen gesagt ;) Laesst sich aber
          leicht einfuegen:

          Na ja - irgendwie muß ich sie ja trennen ;))
          (das wollt ich mit dem \b andeuten)
          Das sieht jedenfalls sehr gut aus
          ;))
          Vielen Dank!

          P.S. aber jetzt wo ich's so seh, denk ich, in wachem
          Zustand hätte ich auch selbst drauf kommen können.

          Ich glaub ich geh ins Bett
          gute Nacht!

        2. Hi,

          if($a !~ m/^\w{4}( \w{4})*$/) {

          ich würd nach dem Leerzeichen noch ein + angeben, dann funktioniert es auch noch, wenn mal jemand 2 oder mehr Leerzeichen reinhaut...

          cu,
          Andreas

          --
          Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
          http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/