Problem mit RegEx Suchparametern

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Problem mit RegEx Suchparametern

    Hallo,

    ich möchte gerne von dieser Website alle Links von de.wowhead.com/?spell= (hier kommen verschiedenne zahlen stränge) oder de.wowhead.com/?item= (hier kommen verschiedenne zahlen stränge) mir anzeigen lassen.

    Um diese zu finden gebe ich diesen Suchstring ein: de.wowohead.com/.spell=........... hier findet er im Quelltext nur 2, obwohl es viele mehr sind. de.wowohead.com/.item=........... findet er gar nichts und es sind auch mehr als 1 Link im Quelltext zu finden.

    Und wenn ich so suche de.wowohead.com/.spell=[0-9] schmiert mir das Programm nach der eingabe des [ ab.
    Auch bei ( oder { funktioniert es nicht mehr.

    Hier mein code:

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. Public Class Form1
    3. Sub FilterExpr(ByVal FilterObject As String)
    4. Dim Results As New List(Of String) 'Res als List
    5. Dim Curr As String = ""
    6. ListBox1.Items.Clear() 'ListBox items leeren
    7. Dim MC As MatchCollection 'Deklariere MC als MatchCollection
    8. 'Je nachdem ob CheckBox1 gecheckt ist, wird Groß- und Kleinschreibung ignoriert oder auch nicht:
    9. If CheckBox1.Checked Then
    10. MC = Regex.Matches(RichTextBox1.Text, FilterObject, RegexOptions.IgnoreCase) 'Wenn gecheckt, wird sie ignoriert
    11. Else
    12. MC = Regex.Matches(RichTextBox1.Text, FilterObject, RegexOptions.None) 'andernfalls wird darauf geachtet
    13. End If
    14. For i As Integer = 0 To MC.Count - 1 'Schleife durchlaufen
    15. If Results.Contains(MC(i).Value) = False Then
    16. Curr = MC(i).Value.ToString
    17. ListBox1.Items.Add(Curr) 'Übereinstimmungen in der ListBox eintragen
    18. End If
    19. Next
    20. End Sub
    21. 'Dann in TextBox1_TextChanged:
    22. Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    23. If Not TextBox1.Text = "." And Not TextBox1.Text = " " And Not TextBox1.Text = "" Then
    24. FilterExpr(TextBox1.Text) 'Unsere Sub FilterExpr wird aufgerufen
    25. End If
    26. End Sub
    27. 'Und noch in RichTextBox1_TextChanged:
    28. Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
    29. FilterExpr(TextBox1.Text)
    30. End Sub
    31. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    32. Me.WebBrowser1.Navigate(TextBox2.Text)
    33. Dim Quelltext As String = Me.WebBrowser1.DocumentText
    34. RichTextBox1.Text = Quelltext
    35. End Sub
    36. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    37. System.IO.File.WriteAllText(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\Seitenquelltext.txt", RichTextBox1.Text)
    38. End Sub
    39. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    40. Me.AcceptButton = Button3
    41. End Sub
    42. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    43. System.IO.File.WriteAllText(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\Gefilterte Strings.txt", ListBox1.Text)
    44. End Sub
    45. End Class


    Ich wollte mir eigtnlich das Leben etwas einfacher gestaslten mit diesem Programm aber es macht es im Moment schwieriger^^

    Weiß wer Rat?


    Lg

    Hablais
    verstehe ich das richtig - du willst im TextChanged bei jedem Tastendruck den Regex abfahren?

    Aber ein Regex ist eine komplexe Abfrage-Anweisung, die interpretiert wird. Wenn die Anweisung gegen Syntax-Regeln der Regex-"Sprache" verstößt, gibts natürlich eine Exception.

    QuicknDirty kannst du eine Textbox ohne Events machen, und einen Button, der die Query abschickt, wenn der User die Eingabe beendet hat, und der Ansicht ist, die Regex-Syntax sei korrekt.

    Ordentlicherweise baut man Regexe nur per Code zusammen, und läßt die User nicht dran rumfummeln, würdichsagn.
    Danke für deine Antwort.

    Wenn ichd ich richtig verstehe soll ich den user in der textbox den such string eingeben lassen und dann über einen button die suche ausführen lassen?

    Wi ekönnte ich das am besten lösen?
    Einfach alles was in dem textbox1 textchange vent steht in das button click evtn verschieben?


    LG

    Hablais

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. Public Class Form1
    3. Sub FilterExpr(ByVal FilterObject As String)
    4. Dim Results As New List(Of String) 'Res als List
    5. Dim Curr As String = ""
    6. ListBox1.Items.Clear() 'ListBox items leeren
    7. Dim MC As MatchCollection 'Deklariere MC als MatchCollection
    8. 'Je nachdem ob CheckBox1 gecheckt ist, wird Groß- und Kleinschreibung ignoriert oder auch nicht:
    9. If CheckBox1.Checked Then
    10. MC = Regex.Matches(RichTextBox1.Text, FilterObject, RegexOptions.IgnoreCase) 'Wenn gecheckt, wird sie ignoriert
    11. Else
    12. MC = Regex.Matches(RichTextBox1.Text, FilterObject, RegexOptions.None) 'andernfalls wird darauf geachtet
    13. End If
    14. For i As Integer = 0 To MC.Count - 1 'Schleife durchlaufen
    15. If Results.Contains(MC(i).Value) = False Then
    16. Curr = MC(i).Value.ToString
    17. ListBox1.Items.Add(Curr) 'Übereinstimmungen in der ListBox eintragen
    18. End If
    19. Next
    20. End Sub
    21. 'Dann in TextBox1_TextChanged:
    22. ' Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    23. ' If Not TextBox1.Text = "." And Not TextBox1.Text = " " And Not TextBox1.Text = "" Then
    24. ' FilterExpr(TextBox1.Text) 'Unsere Sub FilterExpr wird aufgerufen
    25. ' End If
    26. ' End Sub
    27. 'Und noch in RichTextBox1_TextChanged:
    28. Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
    29. FilterExpr(TextBox1.Text)
    30. End Sub
    31. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    32. Me.WebBrowser1.Navigate(TextBox2.Text)
    33. Dim Quelltext As String = Me.WebBrowser1.DocumentText
    34. RichTextBox1.Text = Quelltext
    35. End Sub
    36. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    37. System.IO.File.WriteAllText(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\Seitenquelltext.txt", RichTextBox1.Text)
    38. End Sub
    39. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    40. Me.AcceptButton = Button3
    41. End Sub
    42. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    43. System.IO.File.WriteAllText(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\Gefilterte Strings.txt", ListBox1.Text)
    44. End Sub
    45. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    46. If Not TextBox1.Text = "." And Not TextBox1.Text = " " And Not TextBox1.Text = "" Then
    47. FilterExpr(TextBox1.Text) 'Unsere Sub FilterExpr wird aufgerufen
    48. End If
    49. End Sub
    50. End Class


    so funktionierts nur manchmal, weiß nicht warum^^
    aber wenn es funktioniert dann richtig.

    Lg
    Hablais