Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] Reguläre Ausdrücke - Text in Klammern entfernen.
Chocwise
12.03.2011, 05:24
Ich bräucht eine preg_replace()-Funktion, welche mir aus einem String alles entfernt, was in Klammern und eckigen Klammern steht, inkl. der Klammern selbst. XD
UND alles was nach einem Punkt steht, inkl. Punkt soll auch verschwinden.
Beispiele:
[Blahblubb] Beispieltext 1 (77524).mp3
Wird zu:
Beispieltext 1
Beispieltext - 2 [7673](Blorpdi Gnorp)(Blah)
Wird zu:
Beispieltext - 2
Wie man sieht, sind die Positionen der Klammerdingelinger gerne unterschiedlich.
Kann mir da wer helfen?
Für komplexere reguläre Ausdrücke wie diese ist mein Hirn einfach nich geschaffen. XD
Um übrigbleibende Leerzeichen vor oder hinter dem Ergebnisstring kann ich mich dann selber kümmern mit trim()
Hier noch die Referenzseite zum preg_replace-Befehl:
http://de2.php.net/manual/de/function.preg-replace.php
Dieser Ausdruck sollte auf jeden Fall schonmal die Klammern eliminieren:
/\(.+?\)|\[.+?\]/
Für den Punkt reicht im Prinzip auch ein einfaches substr kombiniert mit strrpos um die Position des letzten Punktes herauszufinden, oder?
Meine Lösung:
/\([-|_\.\ a-zA-Z0-9]*\)|\[[-|_\.\ a-zA-Z0-9]*\]|[\.][a-zA-Z0-9]*/
Das sollte alles beseitigen (solange keine Sonderzeichen vorkommen).
Geht aber bestimmt noch viel leichter ;)
Gruss
DerSepp
Vertaler
12.03.2011, 08:41
Klammern würde ich einfach per Blacklist mit der jeweils entsprechenden geschlossenen Klammer machen:
/(\([^\)]*\)|\[[^\]]*\])*/
Beim Punkt scheint mir dc2s Lösung auch am sinnvollsten, auch wenn das nicht ganz der Beschreibung entspricht. Sieht ja so aus, als sollte nur alles nach dem letzten Punkt entfernt werden, nicht alles nach irgendeinem beliebigen Punkt.
Chocwise
12.03.2011, 14:22
Yo. Danke euch. ;)
Ich werds dann heut Abend mal in mein Script einbauen. :D
Wenn ich so nochmal drüber nachdenk, glaub ich, bekommt man das Abschneiden der Dateiendung auch mit pathinfo() und/oder basename() hin. Werd da später also nochmal drüberlesen. ;)
Für komplexere reguläre Ausdrücke wie diese ist mein Hirn einfach nich geschaffen.
Das stimmt doch garnicht. Für komplexe Anforderungen wie deine sind reguläre Ausdrücke nicht geschaffen. Dann ist das kein Wunder, dass du keinen passenden regulären Ausdruck findest. Den Grund lernt man in der Einführungsvorlesung über theoretische Informatik. Zusammengefasst kann man mit regulären Ausdrücken nicht entscheiden, ob genau so viele Klammern geöffnet wie geschlossen wurden (der folgende Teil also erhalten bleiben soll). Das beweißt man mit dem Pumping Lemma.
Und außerdem:
Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.
Solange zumindest die Anzahl öffnender und schließender Klammern zusammen passt, funktioniert so ein einfacher Ausdruck wie der schon, oder habe ich was falsch verstanden? :dnuhr:
/\(.+?\)|\[.+?\]/
Ggf. mit * statt +, um auch leere Klammern zu erfassen.
Geht hier ja nicht darum, zu erfassen ob die Klammerung korrekt ist :)
Chocwise
12.03.2011, 20:06
@ dc2: Dank dir.
Japp. Alle Klammern werden direkt wieder geschlossen und sind auch nicht verschachtelt. ;)
Das stimmt doch garnicht. Für komplexe Anforderungen wie deine sind reguläre Ausdrücke nicht geschaffen. Dann ist das kein Wunder, dass du keinen passenden regulären Ausdruck findest. Den Grund lernt man in der Einführungsvorlesung über theoretische Informatik. Zusammengefasst kann man mit regulären Ausdrücken nicht entscheiden, ob genau so viele Klammern geöffnet wie geschlossen wurden (der folgende Teil also erhalten bleiben soll). Das beweißt man mit dem Pumping Lemma.
Und außerdem:
Und weshalb genau giftest du nun so rum?
Find ich ja super, dass du eine Einführungsvorlesung in theoretischer Informatik absolviert und tatsächlich auch was behalten hast.
Nur studiert nicht jeder Informatik. Es gibt auch andere Fachbereiche, man solls kaum glauben.
Aber danke für deine magere Hilfe. :rolleyes:
BTW:
garnicht = FALSE
gar nicht = TRUE
Lernt man in der Grundschule 1. oder 2. Jahr irgendwann.
Lolomoloko
12.03.2011, 20:35
Und weshalb genau giftest du nun so rum?
Find ich ja super, dass du eine Einführungsvorlesung in theoretischer Informatik absolviert und tatsächlich auch was behalten hast.
Nur studiert nicht jeder Informatik. Es gibt auch andere Fachbereiche, man solls kaum glauben.
Aber danke für deine magere Hilfe. :rolleyes:
er hat in keinster weise rumgegiftet.
er hat nur darauf hingewiesen dass reguläre ausdrücke für dieses problem keine wirkliche allgemeingültige lösung sein kann.
Wenn du garantieren kannst dass es keine unvollständigen klammernpaare gibt, kann es zwar gut gehn, aber wenn mal irgendwas verschwindet ists halt pech.
vorallem da er sogar noch kurz erklärt hat wiesos nicht funktioniert (bzw. allgemein funktionieren kann)
BTW:
garnicht = FALSE
gar nicht = TRUE
Lernt man in der Grundschule 1. oder 2. Jahr irgendwann.
das du dich einmal zu einem rechtschreibflame erniedrigen würdest…
Chocwise
12.03.2011, 21:12
Wenn er's nicht angreifend gemeint hat, tut's mir leid.
Aber für mich sieht sein Text nun mal nach Klugscheißerei aus. *zucktmitdenschultern*
Abwarten was ojas selbst dazu sagt.
BTW. Es würde nix verschwinden. Ich lass mir das Ergebnis in einem Zenity-Dialog ausspucken um es manuell noch anpassen zu können, bevor ich Chromium mit dem Abfragen eines Queries beauftrage. XD
Zwecks Nautilus-Script und so. :p
...
das du dich einmal zu einem rechtschreibflame erniedrigen würdest…
Sagt der Herr, dessen gesamtes Forendasein mittlerweile fast nur noch von Flaming und Trolling geprägt ist.
Für komplexere reguläre Ausdrücke wie diese ist mein Hirn einfach nich geschaffen.
Das stimmt doch garnicht.
Anders ausgedrückt: du bist nicht zu dumm, einen passenden regulären Ausdruck zu finden.
Für komplexe Anforderungen wie deine sind reguläre Ausdrücke nicht geschaffen.
Anders ausgedrückt: es gibt überhaupt keinen regulären Ausdruck, der das leistet was du beschrieben hast.
Den Grund lernt man in der Einführungsvorlesung über theoretische Informatik.
Anders ausgedrückt: es ist zwar eine elementare Erkenntnis der Informatik, trotzdem nicht einfach zu vermitteln.
Reguläre Ausdrücke (http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck) sind äquivalent zu deterministischen endlichen Automaten (http://de.wikipedia.org/wiki/Deterministischer_endlicher_Automat) (DEA). Ein DEA kann nicht zählen, wieviele Klammern aufgemacht wurden, weiß also nicht ob nach einer schließenden Klammer die weiteren Zeichen verworfen oder mit in die Ausgabe übernommen werden sollen.
Das alles wird aber erst dann zu einem Problem, wenn du Klammern verschachtelst. Ist das nicht der Fall, dann
/ \( [^\)]* \) | \[ [^\]]* \] | \..* /
Leerzeichen habe ich aus Lesbarkeitsgründen eingefügt. Bitte vor Gebrauch entfernen.
Sagt der Herr, dessen gesamtes Forendasein mittlerweile fast nur noch von Flaming und Trolling geprägt ist.
Der Wahrheitsgehalt einer Aussage ist unabhängig von der Person, die die Aussage tätigt.
Lord of Alchemy
13.03.2011, 11:59
Reguläre Ausdrücke (http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck) sind äquivalent zu deterministischen endlichen Automaten (http://de.wikipedia.org/wiki/Deterministischer_endlicher_Automat) (DEA). Ein DEA kann nicht zählen, wieviele Klammern aufgemacht wurden, weiß also nicht ob nach einer schließenden Klammer die weiteren Zeichen verworfen oder mit in die Ausgabe übernommen werden sollen.
Das alles wird aber erst dann zu einem Problem, wenn du Klammern verschachtelst. Ist das nicht der Fall, dann
/ \( [^\)]* \) | \[ [^\] ]* \] | \..* /.
Mit einem DEA kann man aber prüfen, ob die Syntax korrekt ist. Und wenn die Syntax korrekt ist, gibt es genauso viele offene, wie geschlossene Klammern.
Mit einem DEA kann man aber prüfen, ob die Syntax korrekt ist.
Wenn die Syntax verschachtelte Ausdrücke zulässt, dann kann man das nicht mit einem DEA prüfen. Deshalb sind reguläre Ausdrücke auch für HTML im Allgemeinen ungeeignet. Falls du mir nicht glaubst, gib ein Beispiel.
Lord of Alchemy
13.03.2011, 13:09
Wenn die Syntax verschachtelte Ausdrücke zulässt, dann kann man das nicht mit einem DEA prüfen. Deshalb sind reguläre Ausdrücke auch für HTML im Allgemeinen ungeeignet. Falls du mir nicht glaubst, gib ein Beispiel.
Stimmt, ich habe es mir nochmal aufgezeichnet. Das gehr scheinbar nur bei Ausdrücken mit konstanter Länge.
Eigentlich geht es mit Ausdrücken, die eine beschränkte Verschachtelungstiefe haben. Darunter fallen natürlich insbesondere die Ausdrücke konstanter Länge.
Chocwise
13.03.2011, 17:44
@ ojas: Dann tuts mir leid, dass ich dich so angefahren hab.
BTW: Nein, es ist wirklich nie verschachtelt und die Klammern bilden immer sauber ein Paar (öffnen/schließen). XD
Und selbst wenn, ists nich so tragisch. Das Script wird nicht für kritische Zwecke verwendet, sondern soll lediglich Tipparbeit ersparen. :D
Powered by vBulletin® Version 4.2.2 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.