| | | | | | | | | | |||||||
![]() | ![]() | | |||||||||||||
| |||||||||||||||
| |||||||
| Registrieren | Hilfe | Interessengemeinschaften | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
| |
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 |
| Zugriff eingeschränkt, e-Mailadresse ungültig Reg.-Datum: 09.06.2000 |
Hallo zusammen, versuch mich grad dann regulären Ausdrücken und hab folgendes Problem. Ich möchte jeweils die letzte Klammer auslesen. Mein Problem ist das es sein kann, daß in der letzten Klammer auch nochmal ein oder mehrere Klammer enthalten sein könne. Aus dem String der wie folgt ausehen kann: - bla bla bla (TEST1) - bla bla bla (TEST1) (TEST2 (xxx) yyy) - bla bla bla (TEST1) (TEST2) (TEST3 (xxx) yyy) Soll der letzte Klammerinhalt ausgelsen werden. Sollergebnis: - TEST1 - TEST2 (xxx) yyy - TEST3 (xxx) yyy Wäre nett wenn mir da einer weiterhelfen könnte. Folgendes hab ich bereits rausgefunden. \([^()]++\)$ Gruß jocker |
| | |
| | #2 |
Moderator JavaReg.-Datum: 24.07.2007 Ort: auf nem Berg |
Ich denke Du wirst hier mit einem regulären Ausdruck nicht weiter kommen, denn reguläre Ausdrücke sind Reguläre Grammatik ? Wikipedia aus der Chomsky-3-Hierarchie Chomsky-Hierarchie ? Wikipedia Du willst hier letztendlich Anzahlen von Klammern verarbeiten und das geht nicht mit Chomsky-3-Sprachen, sondern Du brauchst Chomsky-2 (Chomsky-Hierarchie ? Wikipedia) und somit eine kontextfreie Grammatik (Kontextfreie Grammatik ? Wikipedia), die man mit einem Push-Down-Automat / Kellerautomat (Kellerautomat ? Wikipedia) durchführen kann. => Bei einem Kellerautomat legst Du immer, wenn Du eine öffnende Klammer findest, diese auf einen Stack, wenn Du eine schließende findest, nimmst Du das oberste Element wieder vom Stack weg. In Deinem Fall musst Du dann nur schauen, nachdem Du die Klammer entfernt hast, ob auf dem Stack noch Daten sind oder ob dieser leer ist.
__________________ In attempting to construct such machines we should not be irreverently usurping His power of creating souls, any more than we are in the procreation of children: rather we are, in either case, instruments of His will providing mansions for the souls that He creates. (Alan Turing) |
| | |
| | #3 |
| Zugriff eingeschränkt, e-Mailadresse ungültig Reg.-Datum: 09.06.2000 |
Sorry - versteh aber nur Bahnhof ?!?
|
| | |
| | #4 |
Moderator JavaReg.-Datum: 24.07.2007 Ort: auf nem Berg | Was verstehst Du nicht? Du wirst mit einem regulären Ausdruck das Problem nicht lösen können, denn mit einem regulären Ausdruck kannst Du nicht "zählen". Du willst immer den "letzten" Klammerausdruck, d.h. Du musst alle Ausdrücke zählen und eben den letzten verarbeiten und das geht nur mit der Struktur eines Kellerautomaten, der sich über einen Stack realisieren lässt
__________________ In attempting to construct such machines we should not be irreverently usurping His power of creating souls, any more than we are in the procreation of children: rather we are, in either case, instruments of His will providing mansions for the souls that He creates. (Alan Turing) |
| | |
| | #5 |
| Zugriff eingeschränkt, e-Mailadresse ungültig Reg.-Datum: 09.06.2000 |
Muß erst mal schauen, wie das mit dem Stack tickert. Trotzdem erstmal Danke. |
| | |
| | #6 |
Moderator JavaReg.-Datum: 24.07.2007 Ort: auf nem Berg | allgemeine Infos: Stapelspeicher ? Wikipedia Kann man selbst über Arrays oder Listen schnell als Klasse programmieren. Evtl hat aber die Sprache, die Du verwendest ein Collection-Interface, das schon einen Stack implementiert hat.
__________________ In attempting to construct such machines we should not be irreverently usurping His power of creating souls, any more than we are in the procreation of children: rather we are, in either case, instruments of His will providing mansions for the souls that He creates. (Alan Turing) |
| | |
| | #7 |
| Zugriff eingeschränkt, e-Mailadresse ungültig Reg.-Datum: 09.06.2000 |
muß das in PHP bewerkstelligen. Wird noch ein langer Abend |
| | |
| | #8 |
| Zugriff eingeschränkt, e-Mailadresse ungültig Reg.-Datum: 09.06.2000 |
<? // PRE: Eingabetext in $txt $txt = "bla bla bla (TEST1) (TEST2) (TEST3 (xxx) (sdfgas) yyy)"; for($i=strlen($txt)-1, $bCnt=null, $needle=''; $i>0; $i--) { if($txt[$i]==')') $bCnt++; if($txt[$i]=='(') $bCnt--; $needle=$txt[$i].$needle; if($bCnt===0) break; } // POST: letzter Klammerinhalt in $needle $laenge = strlen($needle); $laenge = $laenge - 1; $needle = substr($needle, 1 , strlen($string)-2); echo $needle; ?> |
| | |
| | #9 |
Moderator JavaReg.-Datum: 24.07.2007 Ort: auf nem Berg |
Gut gemacht und im ersten Post hast Du noch dazu die Theorie
__________________ In attempting to construct such machines we should not be irreverently usurping His power of creating souls, any more than we are in the procreation of children: rather we are, in either case, instruments of His will providing mansions for the souls that He creates. (Alan Turing) |
| | |
| | #10 |
| Zugriff eingeschränkt, e-Mailadresse ungültig Reg.-Datum: 09.06.2000 |
tjo - das hab ich wohl ![]() Der letzte Link war allerdings der Beste. |
| | |
![]() |
| Tags: php , regulaere ausdruecke |
| Lesezeichen |
| ||||||
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| mit VB.classic XML auslesen | Ricky.G | Basic | 2 | 14.05.2008 18:39 |
| Versionsnummer einer .exe auslesen | Flons | Delphi/RPG+CL/Sonstige | 1 | 20.02.2005 16:36 |
| OU über Anmeldeskript (Batch) auslesen? | DoubleW | Windows Betriebssysteme | 3 | 21.07.2004 20:21 |
| Datei auslesen / Datensatz DRINGEND | Commander_COM | C und C++ | 3 | 15.03.2004 15:10 |
| in MS-DOS string auslesen und bearbeiten | alexf10 | Anwendungssoftware | 8 | 20.06.2002 09:10 |
![]() |
| |||||