Announcement

Collapse
No announcement yet.

Regular Expression

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Regular Expression

    hey leute!

    hab eine regex:

    Pattern p = Pattern.compile(".*(Update|Hotfix)+.*(Windows)+.*" , Pattern.CASE_INSENSITIVE);

    haut auch eigentlich ganz gut hin! nur das problem ist halt, dass er jetzt alle strings filtert, die zuerst update oder hotfix stehen haben und erst dann windows...

    kann ich die irgendwie umbauen, dass es egal ist in welcher reihenfolge die strings vorkommen?

    z.b.:

    Update für Windows XP würde er finden
    Windows Security Update jedoch nicht, weil es ja in anderer reihenfolge steht!

    wie kann ich ihm jetzt sagen dass die reihenfolge egal ist?

    lg,
    alex

  • #2
    Entweder contains() benutzen oder alle möglichen Reihenfolgen hinschreiben

    Hallo leuchtdiode,

    wie kann ich ihm jetzt sagen dass die reihenfolge egal ist?
    Um Dein Problem kurzfristig zu lösen, fallen mir zwei Möglichkeiten ein
    1. Verzichte auf Regular Expressions und verwende die contains()-Methode
    2. Erweitere die Regular Expression um einen zweiten Strang, in dem die Begriffe genau anders herum drinnen stehen.


    Gruß ngomo
    http://www.winfonet.eu

    Comment


    • #3
      Originally posted by ngomo View Post
      Hallo leuchtdiode,



      Um Dein Problem kurzfristig zu lösen, fallen mir zwei Möglichkeiten ein
      1. Verzichte auf Regular Expressions und verwende die contains()-Methode
      2. Erweitere die Regular Expression um einen zweiten Strang, in dem die Begriffe genau anders herum drinnen stehen.


      Gruß ngomo
      naja... contains kann ich nicht verwenden, da ich ja schon prüfen will ob z.b. update UND windows drinsteht! und die regex soll ja im config-file änderbar sein!

      wie kann ich es um einen 2. strang erweitern?

      danke & lg

      EDIT:

      weiß schon was du meinst, habs jetzt so gelöst :-)

      (.*(Update|Hotfix)+.*(Windows|Microsoft)+.*|.*(Win dows|Microsoft)+.*(Update|Hotfix)+.*)

      danke :-)

      Comment


      • #4
        so, hab ein neues problem :-(

        hab einträge wie

        Microsoft Office Proofing (Bulgarian) 2007
        Microsoft Office PowerPoint MUI (German) 2007
        Microsoft Office Access Setup Metadata MUI (English) 2007
        Microsoft Office Word Viewer 2003
        und
        Microsoft Office Professional Plus 2007


        Regex=(.*(Update|Hotfix)+.*(Windows|Microsoft)+.*| .*(Windows|Microsoft)+.*(Update|Hotfix)+.*|^Microsoft Office+.*Professional{0}.*)

        das grüne ist neu hinzugekommen, funktioniert aber nicht...

        ich will alle einträge wo am anfang Microsoft Office steht und dann NIRGENDS mehr Professional!

        anhand obriger liste: es sollte alles ausgegeben werden außer Microsoft Office Professional Plus 2007

        aber das funktioniert so leider nicht :-(

        Comment


        • #5
          .*[Hotfix|Update|Windows].*[Update|Windows].*
          Christian

          Comment


          • #6
            Du verwendest die falschen Klammern

            () -> gruppieren
            [] -> Auswahl
            Christian

            Comment


            • #7
              Das grüne kann nicht funktionieren, da

              ^ der Beginn der Zeile ist

              Nur im Kontext der [] ist es eine Negation

              http://www.fileformat.info/tool/regex.htm
              Christian

              Comment


              • #8
                Mann kann die Aufrufe ja mit UND verknüpfen

                Hallo leuchtdiode,

                naja... contains kann ich nicht verwenden, da ich ja schon prüfen will ob z.b. update UND windows drinsteht! und die regex soll ja im config-file änderbar sein!
                Genau, dann verknüpfst Du eben zwei Aufrufe von contains() mit UND z.B.:
                Code:
                String myString = "Windows Update";
                
                if (myString.contains("Windows") &&  myString.contains("Update")) {
                ...
                }
                Das hatte ich im Sinn, habs aber wohl nicht gut genug erklärt.

                Man könnte die Parameter für contains() im Config-File alle hinterlegen und dann nacheinander mit && verknüpfen, aber wenn es mehr werden sollen, wird das natürlich hässlich. Dann ist ne regex besser.

                Gruß ngomo
                http://www.winfonet.eu

                Comment


                • #9
                  Originally posted by Christian Marquardt View Post
                  Das grüne kann nicht funktionieren, da

                  ^ der Beginn der Zeile ist

                  Nur im Kontext der [] ist es eine Negation

                  http://www.fileformat.info/tool/regex.htm
                  hallo!

                  danke für die antworten! das mit der runden klammer mit Microsoft|Windows und Update|Hotfix funktioniert so wie es ist...

                  nur eben das grüne nicht...

                  mir ist auch bewusst dass ^ für den anfang der zeile steht, denn ich will ja dass "Microsoft Office" am anfang der zeile steht! aber dann soll er nur dinge nehmen, wo nicht mehr "Professional" vorkommt!

                  lg,
                  alex

                  Comment


                  • #10
                    Wie soll das funktionieren, wenn du vorher etwas prüfst

                    (.*(Update|Hotfix)+.*(Windows|Microsoft)+.*| .*(Windows|Microsoft)+.*(Update|Hotfix)

                    was da sein sollte (oder auch nicht) und dann mit ^ den Anfang der Zeile prüfen willst?

                    Das geht nur mit [] Klammern
                    Christian

                    Comment


                    • #11
                      Originally posted by Christian Marquardt View Post
                      Wie soll das funktionieren, wenn du vorher etwas prüfst

                      (.*(Update|Hotfix)+.*(Windows|Microsoft)+.*| .*(Windows|Microsoft)+.*(Update|Hotfix)

                      was da sein sollte (oder auch nicht) und dann mit ^ den Anfang der Zeile prüfen willst?

                      Das geht nur mit [] Klammern

                      aso moment... ich hab ja alles mit einem | verknüpft... sieht das rot markierte...

                      (.*(Update|Hotfix)+.*(Windows|Microsoft)+.*| .*(Windows|Microsoft)+.*(Update|Hotfix)+.*|^Microsoft Office+.*Professional{0}.*)

                      Comment


                      • #12
                        Sorry, ja du hast recht, versuch es mit

                        ^Microsoft Office.*(Professional){0}.*

                        am Ende
                        Christian

                        Comment

                        Working...
                        X