Kleines Reg Exp problem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Kleines Reg Exp problem

    Ich brauch ne ganz einfache Reg Expression. Vielleicht kann mir wer helfen.

    Folgendes möchte ich mit einem String machen:

    Ich habe einen String in dem folgende Zeichenfolgen drin vorkkommen:
    {ZWISCHENDENKLAMMERNKÖNNENGRO?BUCHSTABENUNDZAHLENSEIN}

    Diese Teilstrings beginnen mit einer { und enden mit }
    Dazwischen stehen Großbuchstaben und Zahlen.

    Ich möchte bei diesen Teilstrings alle { in < umwandeln und alle } in > umwandeln. Das ganze brauch ich auch zurück. Das nicht alle { und } umgewandelt werden sollen, ist hoffentlich klar, also nur, die beschriebenen Teilstrings sollen ersetzt werden.

    Vielen Dank

    David

  • #2
    Re: Kleines Reg Exp problem

    Folgendes möchte ich mit einem String machen:

    Ich habe einen String in dem folgende Zeichenfolgen drin vorkkommen:
    {ZWISCHENDENKLAMMERNKÖNNENGRO?BUCHSTABENUNDZAHLENSEIN}

    Diese Teilstrings beginnen mit einer { und enden mit }
    Dazwischen stehen Großbuchstaben und Zahlen.

    Ich möchte bei diesen Teilstrings alle { in < umwandeln und alle } in > umwandeln. Das ganze brauch ich auch zurück. Das nicht alle { und } umgewandelt werden sollen, ist hoffentlich klar, also nur, die beschriebenen Teilstrings sollen ersetzt werden.

    du hast einen string, der definitiv keine geschweiften klammern enthält , und möchtest alle enthaltenen geschweiften klammern umwandeln? wie soll das gehn? oder willst du die begrenzenen klammern umwandeln? wieso sollen nicht alle {} umgewandelt werden, wenn sie sowieso nur jeweils einmal vorkommen, als begrenzer ... und im string sowieso nicht?


    \{([^\}]*)\}

    ersetzen durch

    <\\1>



    edit:sonnenklar
    Zuletzt geändert von derHund; 19.12.2003, 13:42.
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      Weil man in nem Textfeld Seiteninhaklte bearbneiten können soll. Und es können halt auch html tags drin vorkommen. Also ist es bei rückumwandlich schon wichtig, das nur die genannte teilstrings umgewandelt werden. Außerdem soll man ja auch { benutzen können, die nicht umgewandelt werden.

      Kommentar


      • #4
        aber,

        du sagst doch selbst in deinem ersten beitrag, daß nur großbuchstaben und zahlen vorkommen dürfen ...

        wenn die {} soweiso immer am anfang/ende stehen, kannst du sie doch noch einfacher umwandeln ....

        kannst du mal ein konkretes beispiel geben?

        moment, ich versteh glaub ich grad, was du machen willst ...

        dein text sieht so aus, ....

        Yeah bitch I got my Now and Later gators on
        I'm bout to show you how my pimp hand is way strong
        Your dead wrong if ya {UNDDASISTDANN1TEILSTRING} think that pimpin' gon' die
        Twelve piece with a hundred hoes by my side

        dann hast du das problem, das wenn ich in meiner seite {SIC}
        oder ähnliches schreiben möchte, du das auch wandelst ....

        benutze doch als begrenzer {{ }} oder [[]] oder {{{}}} ... oder irgendwas, was der user nicht benutzt ... haha.

        der hier
        Code:
        \{([A-Z\d]+)\}
        läßt nur großbuchstaben und zahlen zu
        Die Zeit hat ihre Kinder längst gefressen

        Kommentar


        • #5
          Ja genau richtig verstanden allerdings {SIC} soll auch umgewandelt werden in <SIC>. Ich geb nochmal ein konkretes Beispiel. Mein Text:

          "So hier kommt ein Text der genau so scheiße *g* ist wie deiner aber hier dürfen { drinne sein und } auch es sind aber auch {NURZAHLENUNDGROßBUCHSTABENKEINELERRSTELLEN} und es geht weiter."

          Das soll zu:

          "So hier kommt ein Text der genau so scheiße *g* ist wie deiner aber hier dürfen { drinne sein und } auch es sind aber auch <NURZAHLENUNDGROßBUCHSTABENKEINELERRSTELLEN> und es geht weiter."

          werden

          und das ganze wieder zurück:

          "So hier kommt ein Text der genau so scheiße *g* ist wie deiner aber hier dürfen { drinne sein und } auch es sind aber auch {NURZAHLENUNDGROßBUCHSTABENKEINELERRSTELLEN} und es geht weiter."

          Für beide schleifen bruahc ich eine replace funktion. Welche nehme ich am besten? könnt ihr mir das mal konkret posten. In beide richtungen bitte. Thx.

          Wichtig: Bei den Teilstrings dürfen keine leerstellen sein.

          Thx David

          Kommentar


          • #6
            hehe,

            OffTopic:
            daß mein text genauso ähm ist, wie deiner solltest du manche leute nicht hören lassen ^^


            was ist wenn ich aber {SIC} schreiben will, zb. um zu kennzeichnen, daß ich in einem zitat fehler nicht von mir stammen ... ok, man nimm [], aber andere sachen würde es auch betreffen ....

            matched den mein regexp (der 2te)? müßte eigentlich ... auf ein oder mehr grossbuchstaben und ziffern ...

            edit:mu0t halt preg_replace nehmen und dann durch <\\1> ersetzen ...
            Zuletzt geändert von derHund; 20.12.2003, 13:14.
            Die Zeit hat ihre Kinder längst gefressen

            Kommentar


            • #7
              das hab ich iim quelltext:

              $str = preg_replace("\{([A-Z\d]+)\","<\\1>",$str);

              und da kommt fehler:


              Warning: Unexpected character in input: '\' (ASCII=92) state=1 in c:\server\apache\htdocs\schule\package\AdministrationDesign.php on line 2

              Warning: Unexpected character in input: '\' (ASCII=92) state=1 in c:\server\apache\htdocs\schule\package\AdministrationDesign.php on line 26

              Parse error: parse error, unexpected '>' in c:\server\apache\htdocs\schule\package\AdministrationDesign.php on line 26

              Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at c:\server\apache\htdocs\schule\package\AdministrationDesign.php:26) in C:\server\Apache\htdocs\schule\page\index.php on line 22

              Fatal error: Cannot instantiate non-existent class: administrationdesign in c:\server\apache\htdocs\schule\cms.content.php on line 12

              Irgendwie kann ich ja auch nen string, also den pattern nicht mit \ beginnen lassen, oder? Ich hab aber keine ahnung...

              Kommentar


              • #8
                Hab mal kurz was über regex gelesen und erfolgreich das problem gelöst, indem ich den delimmiter auf / gesetzt hab. könnt ihr das auch noch für zurück schreiben plz. Danke

                Kommentar


                • #9
                  So, hab schon alles geschafft:
                  $str = preg_replace("/{([A-Z\d]+)}/","<\\1>",$str);
                  und
                  $str = preg_replace("/<([A-Z\d]+)>/","{\\1}",$str);

                  Danke

                  Greetz dav

                  Kommentar


                  • #10
                    ja,

                    vielleicht sollte ich in meine signatur schreiben, daß ich die delimiter 99% niemals angebe, der \ ist zum eventuellen escapen,.
                    Die Zeit hat ihre Kinder längst gefressen

                    Kommentar


                    • #11
                      Axo, ok, aber brauch ich das mit dem escapen, was heißt das? Funzt so ganz gut.

                      Kommentar


                      • #12
                        nun,

                        ich escape die zeichen /{[(()]}.*+? und die, die ich jetzt vergessen hab, in den regexp grundsätzlich, weil sie ja zur syntax gehören.

                        es gibt aber den schalter X, der eine fehlermeldung ausgibt, sollte ein zeichen unnötigerweise escaped werden, ....

                        mit escapen mein ich, maskieren von den zeichen, um klarzustellen, daß sie nicht zur syntax, sondern zum such...muster gehören, naja.
                        Die Zeit hat ihre Kinder längst gefressen

                        Kommentar

                        Lädt...
                        X