Beat: Hilfe bei Regulärem Ausdruck

Beitrag lesen

Also: Ich habe einen String. Dieser String enthält nur Buchstaben. Nun möchte ich alle Buchstaben, bis auf ein paar bestimmte, gematcht bekommen.

Was heisst: "match"
Ein Suchmuster wird fündig, oder es wird nicht fündig bezüglich einem zu durchsuchenden String. Aber man kann nicht davon sprechen, dass einzelne Elemente in der RE ge-matcht haben, andere hingegen nicht.

Mein regulärer Ausdruck sieht so aus (wobei a, s, und d die zu berücksichtigenden Buchstaben sind): [^asd]
Also
'¬§||¢¬§|§' =~ /[^asd]/ and print "TRUE!\n"
Wie bitte? Das verstehe ich nicht. Ich meinte: Mein regulärer Ausdruck sieht bis jetzt so aus: /[^asd]/. Allerdings funktioniert er ja nicht.

Die RE sagt: finde etwas das weder ein a noch ein s noch ein d ist.
folgende Beispiele werden durch die RE gematcht:
'0a'
'asd0asd'
'd00000000d'
'd0000000000000'
' asd'
'das '

In jedem Fall wird etwas im String gefunden, das die Anforderung "sei weder a noch d noch s" befriedigt.

Der String, der durchsucht werden soll sieht so aus: asdhalloasd.
Also garantier immer 'asdhalloasd' ......
Auch das verstehe ich nicht. Ich meinte: Mein String ist zum Beispiel "Donaudampschifffahrt". Und dann sollen alle Buchstaben bis auf "a" und "f" durch Unterstriche (pro Buchstabe ein Unterstrich) ersetzt werden (das ganze ist für HangMan. Das gesuchte Wort ist versteckt und bei jedem erratenem Buchstaben werden die richtigen Buchstaben aufgedeckt; dann ist es vielleicht besser zu verstehen warum ich das ganze will)

Ach so!
Du suchst also:
"Donaudampfschifffahrt" =~ s/[asd]/_/g
sprich : ersetze jedes a, s oder d durch ein _
"Don_udamp_chifffahrt"

"Donaudampfschifffahrt" =~ s/[^asd]/_/g
sprich : ersetze jedes NICHT a, s oder d durch ein _
wird "___a_da__s_______a___"

oder soll es case insensitive sein?
"Donaudampfschifffahrt" =~ s/[^ASDasd]/_/g
oder
"Donaudampfschifffahrt" =~ s/[^asd]/_/gi
wird "D__a_da___s______a___"

Wie bitte? Wenn du meinst, ob auch "485&(&&6" im String vorkommen kann, dann nein. Nur Buchstaben.

Definiere Buchstaben.
Wenn du einen String ausschliessen willst, der Nicht_Deine_Buchstaben enthält, dann musst du das sagen.

my $legal_letter_string_pattern = re/[1]+$/

und

$string =~ $legal_letter_string_pattern and
    $string =~ s/[ASDasd]/_/g;

Hier nochmal eine komplette Beschreibung: Ich programmiere mit VB6 Hangman (Galgenmännle). Das Spiel kennt sicherlich jeder.

ja
Also wird $string von dir vorgegeben!
Insofern bist du selbst verantwortlich, was für Worte für Hangman in Frage kommen.
"WinXP" "HTML 4.01" "Dr.Mabuse" "Johannes-Evangelium"

Es muss ein Wort erraten werden, indem einzelne Buchstaben erraten werden. Tippt der User auf einen falschen Buchstaben wird an der Figur ein Strich mehr gemalt. Ist die Figur fertig gemalt, dann hat der Spieler verloren.
Das gesuchte Wort ist "SELFHTML". Angezeigt wird aber "_ _ _ _ _ _ _ _". Tippt der Spieler jetzt auf ein "L" dann sollen diese eingesetzt werden: "_ _ L _ _ _ _ L"
Und dieses Einsetzen soll der reguläre Ausdruck erledigen. Dazu soll er bspw. alle Buchstaben bis auf "L" (siehe oberes Bsp) durch Unterstriche ersetzen.
Ich hoffe es ist so verständlich.

Ja, das nenne ich jetzt eine Problembeschreibung.

Jetzt ist es natürlich so. dass du im Grunde nicht [asd] ersetzen willst,
sondern die Zeichenklasse, die in der Spielrunde aktuell besteht.

Das heisst: du musst einen String erstellen, der alle bisher eingegeben Buchstaben enthält

my $user_selected_chars = ''; dieser soll die selektierten Buchstaben enthalten.
Sortierung spielt keine Rolle

Achtung immer inputprüfung machen.
$user_input_char =~ /[2]$/ or error('blöder Input');

$user_selected_chars .= $user_input_char;
hänge das Eingabezeichen an die bisherigen chars.

my $hangman_word_to_display = "Donaudampschiffahrt";

$hangman_word_to_display =~ s/[^$user_selected_chars]/_/gi;

Das ist natürlich alles Perl Syntax. Übersetzen musst du es selbst.

mfg Beat

--
   <°)))o><                      ><o(((°>o

  1. ^A-Za-z0-9_ ↩︎

  2. A-Za-z0-9- ↩︎