Zum Inhalt springen

Diskussion:Regulärer Ausdruck

Seiteninhalte werden in anderen Sprachen nicht unterstützt.
aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 10. November 2005 um 14:30 Uhr durch Arittner (Diskussion | Beiträge) (Es gibt mehr als RegExp nach Perl-Syntax). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Letzter Kommentar: vor 20 Jahren von MlaWU in Abschnitt Aufteilung?

verschiedenes

Wie kommt es, dass das Zeichen '^' sowohl für den Zeilenanfang, als auch für die Verneinung steht? Muss es da nicht zu Konflikten kommen? fristu 12:25, 21. Sep 2003 (CEST)

'^' oder auch '$' dienen am Anfag oder am Ende zur Verankerung regulärer Ausdrücke. Es ist nicht der Anfang oder das Ende einer Zeile eines Textes damit gemeint. '^' am Anfang ist eigentlich '^.*', wenn ich mich nicht irre, wird jedenfalls so behandelt. Damit gibts auch keine Konflikte. --Smurf 20:52, 27. Sep 2003 (CEST)
Mir ist nicht ganz klar, was Du mit einer Verankerung meinst und mit '^.*'.
zurueck zur ausgangsfrage: der hut ^ bedeutet "textanfang". falls der hut zu beginn einer zeichenklasse steht, also direkt nach der oeffnenden klammer, (z.b. [^a-z]), dann bedeutet er eine negation.--seth 01:09, 30. Mär 2005 (CEST)

Wie bekomme ich eine Abfrage die nach einer Leerzeile sucht? Konkret versuche ich eine Abfrage zu basteln, die Artikel findet, die keinen einzigen Wiki-Absatz enthalten (also eine Leerzeile). Kann mir da jemand einen Tipp geben? fristu 12:25, 21. Sep 2003 (CEST)

Also einen Artikel mit Absatz sollte per cur_text regexp "\r\n\r\n" zu finden sein, eine Zeile endet mit "\r\n". Wie man das ganze jetzt invertiert, sei dem geneigten Leser als Übung überlassen. --Smurf 20:52, 27. Sep 2003 (CEST)

Unter Benutzung der Rueckwaertsreferenzen erweitern sich regulaere Ausdruecke ueber die moeglichkeit der regulaeren Sprachen hinaus. So ensprechen zum Beispiel PCRE's (Verwendung von Rueckwaertsreferenzen) nicht mehr der Chomsky-Hierarchie Typ 3, sondern sind irgendein Mischmasch. Der Beweis unter Verwendung des Pumpinglemma. Soweit ich weiss bestehen Bemuehungen die Perl Common Regular Expressions auf Typ 2 zu heben - weiss da vielleicht jemand genaueres? Geht natuerlich ueber die Definition in der Informatik hinaus - das tun aber auch die Rueckwaertsreferenzen.

Was bedeutet "heben"? Ein Perl Regexp der Form /^(a*?)b\1c\1d$/ entspricht der Sprache a^nba^nca^nd und lässt sich mE. nicht durch einen Kellerautomaten, sondern einen Turingautomaten lösen (Typ 1)

Aufteilung?

Der Artikel krankt so ein bißchen am Aufbau. Ich denke, man sollte das mal etwas umschreiben und zuerst erklären, was ein regulärer Ausdruck (in der Theoretischen Informatik) ist und anschließend die Syntax der verschiedenen Programme erklären. Meinungen? -- MlaWU 14:44, 23. Mär 2005 (CET)

tu das! ;-) --seth 01:10, 30. Mär 2005 (CEST)
Au ja! -- D. Dÿsentrieb 02:07, 30. Mär 2005 (CEST)
ich probiere es mal -- MlaWU 16:20, 9. Mai 2005 (CEST)Beantworten

Es gibt mehr als RegExp nach Perl-Syntax

Man sollte nicht vergessen, dass es auch noch andere Syntax-Formen von regulären Ausdrücken gibt, die nichts mit der im Artikel beschriebenden zu tun hat. So sind die Wildcards * und ? von DOS oder % und _ in SQL-LIKE reguläre Ausdrücke. Vor allem sind Sie dem geneigten Leser vielleicht sogar bekannter ;-) Der Artikel liest sich für mich so, als würde es nur die eine beschriebene Syntax einen Regulären Ausdruck ausmachen. -Arittner 20:20, 9. Nov 2005 (CET)

du verwechselst wildcards mit regulaeren ausdruecken. (siehe auch [1])--seth 20:54, 9. Nov 2005 (CET)
Die DOS Wildcards und die SQL Syntax sind ebenfalls Möglichkeiten, reguläre Sprachen zu definieren. Den Begriff "Regulärer Ausdruck" kenne ich aber nur für das, was Perl und Grep verwenden, bzw, etwas formaler, was man in der Informatik benutzt (also z.B. a*b2 oder sowas). Mit letzterer Syntax lassen sich aber durchaus auch sprachen definieren, die nicht regulär sind (z.B. anbn). -- D. Dÿsentrieb 23:13, 9. Nov 2005 (CET)
wie definiert man mit dos-wildcards eine regulaere sprache?--seth 23:58, 9 November 2005 (CET)
a* (DOS, syntax) ist Regulär (entspricht a.* in Perl-Syntax - dabei wird ein endliches Alphabet als Grundmenge vorausgesetzt). Man kann aber nicht jede Reguläre Sprache mit solchen Wildcards beschreiben, sie sind weniger mächtig als "echte" reguläre Ausdrücke. Oder was genau ist deine Frage? -- D. Dÿsentrieb 00:25, 10 November 2005 (CET)
Ok, nochmal genauer: jedes "Muster", das Wörter akzeptiert (oder generiert, je nach Perspektieve) definiert eine Sprache. Alle Muster, die sich mit regulären Ausdrücken (Perl Style) definieren lassen, definieren reguläre Sprachen (saher der Name), und alle regulären Sprachen lassen sich durch solche Ausdrücke definieren. Alle Muster, die sich mit DOS- oder LIKE Syntax definieren lassen, definieren ebenfalls reguläre Sprachen, aber nicht alle regulären Sprachen lassen sich durch DOS-Wildcards oder LIKE Muster definieren. -- D. Dÿsentrieb 00:31, 10. Nov 2005 (CET)
ok, ich hatte dich zunaechst missverstanden (obwohl du's gar nicht falsch formuliert hast). sorry, war ne doofe frage. --seth 00:45, 10. Nov 2005 (CET)
@seth - nein verwechseln tu ich da nichts. Reguläre Ausdrücke und Reguläre Sprachen in der theoretischen Informatik definieren keine spezifische Syntax. Sie stellen (wie der Artikel ja schon richtig anfängt) formale Sprachen dar. Das die Bezeichnung "Regulärer Ausdruck" so stark von der Perl Syntax gefärbt ist, so dass es immer wieder gleich gesetzt wird, gebe ich ja gerne zu - bemängele das aber auch. Nun sind die Wildcards in DOS mit * und ? ganz sicher eine formale Sprache, um Zeichenkettenmuster zu beschreiben. Und die formale Sprache der Wildcards sind auch ohne Zweifel vom Typ 3 in der Chomsky-Hierarchie. Und dort das Zitat: Reguläre Sprachen können alternativ auch durch reguläre Ausdrücke beschrieben werden und die regulären Sprachen sind genau die Sprachen, die von endlichen Automaten erkannt werden können. Sie werden gewöhnlich genutzt, um Suchmuster oder die lexikalische Struktur von Programmiersprachen zu definieren.
@Dÿsentrieb - den Umkehrschluss, dass alle Untermengen von Perl RegExp Reguläre Ausdrücke sein müssen ist nicht ganz richtig, denn gerade aktuelle Perl Ausdrücke erlauben Rückwärtsreferenzen. Damit ist Perl-Regexp Grammatik nicht mehr eindeutig rechtsregulär oder linksregulär. Damit müssen auch Untermengen von Perl RegExp keinen reine Reguläre Ausdrücke sein. Davon unabhängig, wollte ich eigentlich nur sagen, dass Perl RegExp nur eine bestimmte Syntax hat, aber nicht die alleinige Reguläre Grammatik ist. Es gibt durchaus einfachere und erheblich komplexere Grammatiken. --Arittner 13:30, 10. Nov 2005 (CET)