Replace-Funktion (Ersetzen) mit Wildcards (Platzhaltern)

  • VB6

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    Replace-Funktion (Ersetzen) mit Wildcards (Platzhaltern)

    Ich möchte genau so etwas machen, wie der "Jens Balchen Jr." in folgendem Newsgroup-Posting:

    groups.google.de/group/comp.la…ce+wildcards&rnum=5&hl=de

    Beispiel:

    Ich habe einen langen HTML Code, u.a. mit Links. Ein Link sieht so aus:

    Quellcode

    1. [url=]*[/url]", "[url=*]*[/url]


    Ich hoffe, ihr versteht, was ich meine. Hat sowas schon mal jemand gemacht? Oder hat jemand einen Tipp für mich, wie sowas zu realisieren ist?
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Wenn es unbedingt mit 'Replace' gemacht werden muss, wirst Du wohl oder übel nicht drumherum kommen alles zu ersetzende einzeln anzugeben.

    Quellcode

    1. Dim strURLOriginal As String = "[url=http://www.vb-paradise.de/]Forum[/url]"
    2. Dim strURLFirst As String
    3. Dim strURLSecond As String
    4. Dim strURLThird As String
    5. 'Ersetzt "<a href=" mit "[URL="; wenn nichts ersetzt werden soll, vbNullString nehmen)
    6. strURLFirst = strURLOriginal.Replace("<a href=""", "[URL=")
    7. 'Weiter
    8. strURLSecond = strURLFirst.Replace(">",vbNullString)
    9. 'Weiter
    10. strURLThird = strURLSecond.Replace("Forum</a", "Forum[/URL]")


    Wenn der String unbedingt mit irgendwelchen Zeichen aufgefüllt werden soll, eignen sich 'PadLeft' und 'PadRight'.

    Empfehlen würde ich Dir, das erste und das letzte Typographzeichen zu suchen und den String zwischendrin zu nehmen. Das geht unter .net mit 'IndexOf' und 'LastIndexOf' (sehr elegant).
    Es geht doch auch einfacher:
    1)

    Quellcode

    1. [url=
    durch

    Quellcode

    1. [url=

    2)

    Quellcode

    1. ]
    durch

    Quellcode

    1. ]

    3)

    Quellcode

    1. [/url]
    durch

    Quellcode

    1. [/url]


    Eine Funktion mit Wildcards ist mir nicht bekannt, könnte man ja aber auch selber erstellen...
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    Natürlich muss das ganze nicht mit der VB Replace Funktion gemacht werden!

    Eure Methode ist leider schlecht, weil z.B.

    Quellcode

    1. ">
    wesentlich häufiger vorkommt, als nur in URLs.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Ich hab mal schnell ne Funktion geschrieben:

    Quellcode

    1. Dim html As String, posL As Integer, posA1 As Integer
    2. Dim posA2 As Integer, posE As Integer, posT As Integer
    3. Dim Title As String, Link As String
    4. html = "test1[url=]Link2[/url]test3"
    5. posL = 1
    6. Do
    7. posL = InStr(posL, html, "<a ")
    8. If posL > 0 Then
    9. posA1 = InStr(posL, html, """")
    10. posA2 = InStr(posA1 + 1, html, """")
    11. posT = InStr(posA2 + 1, html, ">")
    12. posE = InStr(posA2, html, "</a>")
    13. Link = Mid$(html, posA1 + 1, posA2 - posA1 - 1)
    14. Title = Mid$(html, posT + 1, posE - posT - 1)
    15. html = Left$(html, posL - 1) & "[url= & Link & ]" & Title & "[/url]" & Right$(html, Len(html) - posE - 3)
    16. End If
    17. Loop While posL > 0
    18. MsgBox html
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    weil z.B. code:
    ">

    wesentlich häufiger vorkommt


    Dann nimm "Forum< /a >", anstatt ">" und erstze es durch "Forum[/URL]".

    Wo ist das Problem ?

    Wenn Du eine gute Methode hast, bin ich aber gespannt darauf.

    //edit < /a > übernimmt der Code hier natürlich nicht ohne Leerzeichen. ;)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Pascal“ ()

    Hat dir mein Code geholfen? Oder war das mit dem "HTML-Link zu BBCode" nur ein Beispiel und du suchst eine generelle Funktion mit Wildcards?
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    du könntest doch den ganzen text durchgehen und diese X teile hintereinander suchen.

    Du gehst so lange mit for i = 1 to len(string) durch, bis du alle 3 teile (mit wildcards dazwischen) gefunden hast und merkst dir Absolute Startposition und insgesammte länge. Nacher schneidest du den defungenen string mit
    Relevanter String = mid(Ganzer String, Start, Länge)

    Und dann behandelst du den Relevanten String, indem du zuerst den teil 1 durch deinen teil 1 ersetzt. Dann den 1. Teil 2 der vorkommt (nicht alle, da die restlichen ja in der wildcard liegen) durch deinen teil 2 und dann den 3. teil am ende.

    Ist doch nicht so schwer?!
    Hallo,

    wenn dir ein Verweis mehr nichts ausmacht könntest du das mit Regular Expressions machen. In der MS Scripting Runtime ist ein entsprechendes Objekt verfügbar. Die entsprechenden regulären Ausdrücke kannst du bei Google aus einem x-beliebigen BB Code PHP Script ziehen.

    Gruß,
    Frank
    Danke.

    Aber ist mein Problem überhaupt mit Regular Expressions lösbar? Weil ich möchte ja nicht einfach x durch y ersetzen, sondern nur x behalten und y durch was anderes ersetzen.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Also ich glaub nicht, dass Regular Expressions das richtige sind... Die sind in meinen Augen nur zum Vergleichen, aber nicht für dein Problem geschaffen


    -------


    Noch was:
    Ich würde das so machen:
    Du nimmst den "suchstring" und Splittest den bei jedem "*".
    Dannach Suchstdu per instring den ersten Teil, merkst dir die position, suchst nach dem nächsten teil, wieder per instr, gibst jetzt als startposition, die fundposition des letzten gefundenen an + die länge vom letzten gefundenen.
    Und das ganze in ner For-Schleife von LBound bis UBound vom gesplitteten und das wieder rum in ne Do-Loop-Schleife packen, damit der das nicht nur ein mal durcharbeitet...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mad Andy“ ()

    Jetzt hat mir gerade jemand gesagt, dass es definitv mit Regular Expressions geht. Nur wie? Hat jemand eine Idee? Ich blicke da überhaupt nicht durch.

    Edit: Habe es nun hinbekommen, aber OHNE Regular Expressions.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()