StringRegExp...ich habe keine Ahnung :(

  • Hallo zusammen,
    wer gibt mir mal eine Hilfestellung bzgl. der Regular Expressions?
    Folgendes Problem:
    In einem String sollen die Buchstaben des gesamten Alphabets gefunden werden, allerdings jeder maximal einmal.
    Bspstring "Lambrusco" => TRUE, denn jeder Buchstabe kommt nur einmal vor
    Bspstring "Die Murksbrothers" => False, denn z.B "e" und "s" kommen mehrfach vor

    d.h. ich verwende als Pattern [a-zA-Z], denn das sind ja die gesamten Buchstaben, ein ? muss auch noch irgendwohin, ich möchte jeden Buchstaben ja nur einmal finden.....und da verliessen sie ihn^^

    Habe einiges probiert, komme aber nicht weiter...

    thx vorab
    ciao
    andy

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (2. April 2009 um 18:13)

  • Der erste RegEx stimmt ;) Also

    [autoit]

    $Es_gibt_doppelte_Buchstaben = StringRegExp($String, "([a-zA-Z]).*\1")

    [/autoit]
    • Offizieller Beitrag

    Die RegExp-freie Version: :rolleyes:

    [autoit]


    $string = 'Lambrusco'
    MsgBox(0,0,_Double($string))

    [/autoit][autoit][/autoit][autoit]

    Func _Double($sTest)
    For $i = 0 To 25
    $sTest = StringReplace($sTest, Chr(65 + $i), '', 1, 1)
    $sTest = StringReplace($sTest, Chr(97 + $i), '', 1, 1)
    Next
    Return $sTest <> ''
    EndFunc

    [/autoit]

    Aber die RegExp-Version gefällt mir besser. :)

  • Vielen Dank! :thumbup:
    Hab sogar kapiert, wieso das funktioniert :D
    Ist wie mit allem anderen auch, je mehr man sich damit befasst, desto klarer wirds

  • Hi, ich stehe wieder auf dem Schlauch.
    Wie könnte man folgendes Problem lösen?: "Finde genau einen Treffer des Teilstrings im String."
    AutoIt -Äquivalent:

    [autoit]

    Func _stringgenaueinmal($string,$teilstring)
    if StringInStr($string,$teilstring)<>0 and StringInStr($string,$teilstring,0,2)=0 Then ;finde einen oder mehrere treffer und nicht 2 treffer => nur ein einziger treffer
    return 1

    [/autoit][autoit][/autoit][autoit]

    Else
    return 0
    endif
    EndFunc ;==>_zifferdoppelt

    [/autoit]


    Die einfachen RegEx´es kann ich nachvollziehen, aber zzt fehlt noch der "Klick" um eigene zusammenzustricken...

    Die Position(en) des Teilstrings im String bekommt man doch, indem man das zurückgegebene Array ausliest?!
    $array=StringRegExp(......
    $array[0]=position

    ciao
    Andy

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (3. April 2009 um 00:41)

    • Offizieller Beitrag

    @Xeno: Wieso sollte das so nicht klappen? Es werden alle Groß- und alle Kleinbuchstaben jeweils einmal aus dem String entfernt (sofern vorhanden) und wenn dann ein Leerstring überbleibt, dann waren keine doppelten Buchstaben dabei.

    Andy: Könnte man so lösen:

    [autoit]


    $string = 'BlablaLambruscoNoch mehr Text'
    $teilstring = 'Lambrusco'
    $array = StringRegExp($string, $teilstring, 3)
    If UBound($array) = 1 Then MsgBox(0, '', '1x vorhanden!')

    [/autoit]