batchfan
Goto Top

Was sind reguläre Ausdrücke

Hallo liebe/r Batch-Freunde/in
ich bin neu hier und möchte mich kurz vorstellen, dann eine Frage stellen.
Ich bin 55, besitze seit 1993 einen PC und habe Freude an der Lösung
eines EDV-Problems mit einfachsten Mitteln. Der schnelle "Klick" ist heutzutage
wichtig, ok, wird von mir aber unter "keine Herausforderung" einsortiert.
Seit einiger Zeit lese ich hier mit und bin hellauf begeistert. Ich habe mir viel erlesen
können. Lieben Dank an dieser Stelle für die vielen tollen Beiträger an alle Schreiber.
Ich hoffe sehr, das meine Beiträge korrekt sind und der "rote Faden" erkennbar ist.
Ich hoffe das es ok ist, das bei mir weniger Tilden zu finden sind und von mir weniger
die "ich schreibe alles in eine Endcodezeile" bevorzugt wird face-smile

Zu meiner Frage:

In Hilfetexten lese ich sehr oft über "reguläre Ausdrücke"
Kann mir wer sagen was das ist und kann ggf. ein paar Beispiele
einer Anwendung sagen?

Lieben Dank für Euere Antworten vorweg !
Gruß Volker

Content-Key: 175677

Url: https://administrator.de/contentid/175677

Printed on: April 19, 2024 at 19:04 o'clock

Member: mrtux
mrtux Nov 02, 2011 at 18:46:57 (UTC)
Goto Top
Hi und willkommen im Forum !

[ot]
Jetzt bin ich jetzt aber mal gespannt was da kommt.... face-smile
[/ot]

Also ich kann es jedenfalls nicht besser (oder einfacher) beschreiben, als es hier schon steht. In der Praxis werden sie u.a. auch als Filterbeschreibungen von Parsern (z.B. XML/HTML Parsern) verwendet.

mrtux
Member: dog
dog Nov 02, 2011 at 18:49:40 (UTC)
Goto Top
Das kann man doch wie immer alles bei Wikipedia nachlesen...?

Reguläre Ausdrücke sind eine "Suchsprache".
Man definiert wie ein Text strukturell aufgebaut sein muss und kann danach suchen oder den Text auf Korrektheit überprüfen.

Möchtest du z.B. in einem Text ein Datum im Format TT.MM.JJJJ suchen, dann ist der reguläre Ausdruck dafür /[0-9]{2}\.[0-9]{2}\.[0-9]{4}/
Und wenn du jetzt mitgedacht hast merkst du auch, dass sich damit auch das Datum 99.14.1001 finden lassen würde.
Also müssen wir den regulären Ausdruck noch ausbauen: /(0?[1-9]|[12][0-9]|3[01])\.(0?[1-9]|1[012])\.[0-9]{1,4}/
Und selbst damit wäre ein Datum wie der 31.02.2011 noch nicht ausgeschlossen.

Du siehst also, dass Reguläre Ausdrücke ganz schnell ziemlich kompliziert werden und trotzdem oft noch Probleme haben.
Darum gilt bei RegExen der klassische Spruch:

Manche Leute denken "Ich habe ein Problem - ich werde das mit Regulären Ausdrücken lösen" - Jetzt haben sie zwei Probleme.
Mitglied: 64748
64748 Nov 02, 2011 at 18:56:01 (UTC)
Goto Top
Hallo Batchfan, willkommen hier im Forum,

Reguläre Ausdrücke beschreiben Eigenschaften von Zeichenketten. Sie sind in allen Programmiersprachen verfügbar, auch in Texteditoren usw.

Sie werden benutzt um bestimmte Zeichenketten zu finden bzw Text zu ersetzten.

Der Umfang und die Art der Regex-Maschine unterscheiden sich aber z.T. erheblich.

Tonangebend ist die Programmiersprache Perl, die dort verfügbaren Features gelten als das Maß aller Dinge in dem Bereich. Allerdings finden die regulären Ausdrücke im Windows-Bereich nicht so viel Verwendung wie bei Unix/Linux.

Dieser http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck Wikipedia-Artikel gibt einen Überblick.

Das Buch "Reguläre Ausdrücke" von Jeffrey Friedl http://www.amazon.de/Regul%C3%A4re-Ausdr%C3%BCcke-Jeffrey-F-Friedl/dp/3 ... ist eines der besten Computer-Bücher die ich bisher gelesen habe.

Beispiele findest Du im Internet wie Sand am Meer. Für mich gehören Reguläre Ausdrücke zu den wichtigsten Werkzeugen bei meiner Arbeit. Wenn man sie beherrscht, kann man nicht mehr ohne sie.

Gruß

Markus
Member: Biber
Biber Nov 02, 2011 at 19:32:43 (UTC)
Goto Top
Moin Batchfan,

willkommen im Forum.

Nur noch zwei Fussnoten zu den kompetenten Vor-Kommentaren.

a)
Ein Testen und gefahrloses Ausprobieren von "Regulären Ausdrücken" ist am CMD-Prompt möglich, beispielsweise mit
Dir /s /b | Findstr /R "<RegEx>"

--> Zu "Findstr" in Verbindung mit "RegEx" sollten auch Suchmaschinen einiges liefern.

b)
[OT]
Zitat von @64748:
...Für mich gehören Reguläre Ausdrücke zu den wichtigsten Werkzeugen bei meiner Arbeit.
Bei uns im Team sind eher spontane nicht ganz so reguläre Kraftausdrücke in mehreren Sprachen üblich.
Wenn man sie beherrscht, kann man nicht mehr ohne sie.
Das wiederum ist bei uns auch so.
[/OT]

Grüße
Biber
Member: brammer
brammer Nov 02, 2011 at 19:35:48 (UTC)
Goto Top
Hallo,

OT
Reguläre Ausdrücke = Kraftausdrücke?

Das wäre mir neu.
Wobei manchmal das zweite besser funktioniert als die ersten....

OT


brammer
Member: Batchfan
Batchfan Nov 02, 2011 at 19:36:54 (UTC)
Goto Top
Hallo zusammen face-smile
@mrtux: Lieben Dank für den Hinweis, sehr komplex und hilft mir leider nicht weil ich noch in den Batch-Kinderschuhen stecke. Danke aber trotzdem !
@dog: Sehr eindrucksvoll und weckt mein Interesse ... Werde ich mich durcharbeiten ... mit ...
@64748: ... mit dem Buch von O'Reilly. Habe ich bestellt.

Mal sehen was draus wird.
Mir fehlen noch ein wenig die kompletten Eingabezeilen um Zuzsammenhänge zu erkennen. Werde aber daran bauen und berichten face-smile
Gruß Volker
Member: nxclass
nxclass Nov 03, 2011 at 10:37:18 (UTC)
Goto Top
Kann mir wer sagen was das ist und kann ggf. ein paar Beispiele
/(h[t]{2}p\:\/\/)?[w]{3}\.g[o]{2}gle\.de/
Member: Batchfan
Batchfan Nov 06, 2011 at 12:26:53 (UTC)
Goto Top
So, hallo zusammen ...

ich war beruflich einige Tage unterwegs, was öfters mal vorkommen kann.
Habe aber nun das vom Markus empfohlene Buch bekommen. Habe die ersten
Seiten gelesen und ich denke, das das kein einfaches Thema ist.
Was mir noch total schwer fällt ist, diese Semantik auf der Eingabezeile zu verstehen.
Ich werde mal weiter suchen um einige Beispiele mal zusammenzusammeln.
Mir ist auch nicht klar, welcher Befehl das verarbeiten kann und welcher nicht oder
aber, wie man das ganz in einer Schleife einbindet ...
Nu werd ich zunächst aber mal lesen .... Wer aus dem Stegreif einige kleine verständliche
Beispiele auf Eingabezeile hätte, dem wäre ich sehr dankbar face-smile

Es grüßt, Volker
Mitglied: 64748
64748 Nov 07, 2011 at 11:04:24 (UTC)
Goto Top
Hallo Volker,

Wer aus dem Stegreif einige kleine verständliche Beispiele auf Eingabezeile hätte, dem wäre ich sehr dankbar

hier ein Beispiel. Kurze Erklärung, ich schreib mit Perl ein kurzes Programm welchen Geographische Koordinaten verarbeiten kann. Es geht darum, einen Eingabestring der Form "N 51° 3.123' E 006° 12.543'" umzuwandeln in einen Vektor mit Grad und Bogenminuten. Die folgende Funktion testet zunächst ob der übergebene String dem Format "N xx° xx.xxx'" oder "E xxx° xx.xxx'" entspricht und bricht sonst den Programmablauf ab.
sub str2vect{
      my $coordstring = shift ;
      die "Fehler: $coordstring \n " if $coordstring !~ /[NE]\s\d{2,3}°\s\d{1,2}\.\d{1,3}/ ;
      # ...
}
Der reguläre Ausdruck bedeutet: [NE] "N" oder "E",
\s ein Whitespace (Leerzeichen oder Tab)
\d eine Ziffer
{2,3} zwei oder drei davon
usw.
der Punkt muss hier mit Backslach escaped werden, weil er sonst auf "jedes Zeichen" passt.

Der Ausdruck kann natürlich noch verfeinert werden und dann testen, dass für die Grad und Minuten auch sinnvolle Werte eingegeben werden. Also die Gradzahl kann maximal gleich 180 sein, also testet man anstatt /\d{2,3}/ auf /[01]?\d{1,2}/

Übrigens ist das Buch von Friedl im Anbetracht der trockenen Materie wirklich gut zu lesen face-wink

Gruß

Markus
Member: Batchfan
Batchfan Nov 08, 2011 at 16:11:16 (UTC)
Goto Top
Markus,
lieben Dank für Deinen Eintrag. Aber ich muß viel weiter vorne anfangen.
Das Buch ist sehr schwer zu lesen. Viel zuviel Text, zuwenige Beispiele mit einer kompletten Befehlszeile.
Wie der Author schreibt, ist es Erzählung, darin eingebettet Einzelheiten für den der das Handbuch darin
sucht. Dieses Buch wird, wenn ich mit den RA "gehen" gelernt habe, später zum Einsatz kommen. Im
Netz habe ich auch nicht viel brauchbares gefunden. Die meisten bieten nach wenigen Sätzen hochkomplexe
Eingabezeilen an. mmmmmhh face-sad ich denke da an "Reguläre Ausdrücke für Dummis ... face-smile"

Bitte habt also Geduld, ich muß erst eine passende Leseunterlage finden und das was ich habe mal mehr lesen ...

Das habe ich aber für andere Leser gefunden:
http://www.gaddo.de/temp/ausgang/Regulaere_Ausdruecke.pdf
http://de.globalsoftwareindex.com/tutorials/41/regulaere-ausdruecke-tut ... (hat mehere Teile ...)
http://www.funduc.com/regexpd.htm
http://www.micbie.at/wissenswertes/perl_kurs/Kap10.html

Gruß volker
Member: nxclass
nxclass Nov 08, 2011 at 20:44:45 (UTC)
Goto Top
noch ein Link (zu einem Link zu einem Tutorial) :
Member: Batchfan
Batchfan Nov 09, 2011 at 17:50:07 (UTC)
Goto Top
Vielleicht mal diese konkrete Frage:

Mein Dateiordner hat u.a. folgende Dateien.
meier.txt
meyer.txt
Wie lautet der Dir-Befehl um genau diese auszufiltern ?

oder ...

bbccddee.txt
bcdebcde.txt
Wie lautet der Dir-Befehl um z.B. Dateien mit 2 gleiche aufeinanderfolgende Zeichen (cc) zu finden ?
oder
Die Datei mit geginnendem b und endendem t zu finden ?

Gruß volker
Mitglied: 64748
64748 Nov 09, 2011 at 18:05:00 (UTC)
Goto Top
Hallo Volker,

das bezieht sich jetzt auf Perl, angenommen Du hast einen String $name, dann kannst Du testen
if ( $name =~ /me[iy]er/ )
und zwei gleiche Buchstaben hintereinander
if ( $name =~ /\w{2}/ )
wobei \w auf alphanumerische Zeichen passt, also das gleiche ist wie [a-zA-Z_]

Markus
Member: dog
dog Nov 09, 2011 at 18:08:08 (UTC)
Goto Top
um genau diese auszufiltern ?

/me[iy]er\.txt/

Dateien mit 2 gleiche aufeinanderfolgende Zeichen (cc) zu finden ?

/(.)\1/

Die Lösung if ( $name =~ /\w{2}/ ) ist übrigens falsch. Das steht nur für 2 beliebige Buchstaben. Nicht zweimal das selbe Zeichen.

Die Datei mit geginnendem b und endendem t zu finden ?

/^b.*t$/
Member: Biber
Biber Nov 09, 2011 at 18:32:01 (UTC)
Goto Top
Moin Batchfan,

ein Stück weiter oben verwies ich schon vergeblich auf die Möglichkeit des gefahrlosen RegEx-Testens am CMD-Prompt mit FindStr.

Beispiele dafür, bezogen auf deine Übungsfragestellung:
d:\temp>echo.>bbccddee.txt

d:\temp>echo.>bcdebcde.txt

d:\temp>dir /a-d /b|findstr /r "^b.*t$"
backup2.txt
battest.bat
bbccddee.txt
bcdebcde.txt
biblio.dbt
binfile.txt
bsp.txt
bspUTF_Typed.txt

d:\temp>dir /A-d /b|findstr /r "^b.*cc.*t$"
bbccddee.txt

d:\temp>

  • der erste eingegebene Befehl dir /a-d /b|findstr /r "^b.*t$" listet alle Dateien auf, die mit "b" beginnen und mit "t" kläglich enden.
  • der zweite eingegebene Befehl dir /A-d /b|findstr /r "^b.*cc.*t$" listet alle Dateien auf, die mit "b" beginnen,mit "t" kläglich enden.und ein "cc" dazwischen haben.
In beiden Fällen übrigen jeweils bezogen auf ein kleingeschriebenes "b" bzw "t" resp. "cc".

Ist die Klein/Grossschreibung egal.... dann wäre das Ergebnis länger:
d:\temp>dir /a-d /b|findstr /i /r "^b.*t$"
backup2.txt
battest.bat
bbccddee.txt
bcdebcde.txt
Bibertest.txt
biblio.dbt
binfile.txt
bsp.txt
BspUTF8.txt
BspUTFcmda.txt
BspUTFcmdu.txt
BspUTFout.txt
bspUTF_Typed.txt

Grüße
Biber
Member: Batchfan
Batchfan Nov 10, 2011 at 18:47:36 (UTC)
Goto Top
Danke zunächst einmal euch allen. Diese wenige Zeilen waren reichlich Futter für mich.
Anhand Euerer Beispiele weiß ich nun wie ich ein Suchmuster in einen Befehl auf der Kommandozeile einbinden muß.
Gerne einige Beispiel aus dem Leben am Prompt mehr ....
Wenn "nur" das Suchmuster wie bisher angegeben wird, habe ich Probleme mir vorzustellen wie ich das in eine
Befehlszeile einbinden muß. Diese Beispiele waren da jetzt wie ein aufgebrochenes Eis.
So weiß ich jetzt das z.B. ein Dir Befehl einen Input in einen Findstr-Befehl gibt und der diesen auswertet.
Lieber Biber, das bisherige ergebnislose ;-( Austesten von diesen Suchmustern machte ich ausschließlich am Prompt.
Sorry wenn ich das ungenau beschrieben hatte und Dein liebgemeinter Hinweis ohne Echo blieb.
Bin am WE unterwegs ... bin also nicht am PC zusammengebrochen wenn's keine Antwort gibt. face-smile
Danke aber für Euere Mühe und Geduld, wir lesen uns dann nächste Woche wieder.
Herzlichen Gruß, Volker