Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Was sind reguläre Ausdrücke

Frage Entwicklung Batch & Shell

Mitglied: Batchfan

Batchfan (Level 1) - Jetzt verbinden

02.11.2011, aktualisiert 19:39 Uhr, 4170 Aufrufe, 16 Kommentare

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

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
Mitglied: mrtux
02.11.2011 um 19:46 Uhr
Hi und willkommen im Forum !

[ot]
Jetzt bin ich jetzt aber mal gespannt was da kommt....
[/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
Bitte warten ..
Mitglied: dog
02.11.2011 um 19:49 Uhr
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.
Bitte warten ..
Mitglied: hmarkus
02.11.2011 um 19:56 Uhr
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
Bitte warten ..
Mitglied: Biber
02.11.2011 um 20:32 Uhr
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 hmarkus:
...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
Bitte warten ..
Mitglied: brammer
02.11.2011 um 20:35 Uhr
Hallo,

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

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

OT


brammer
Bitte warten ..
Mitglied: Batchfan
02.11.2011 um 20:36 Uhr
Hallo zusammen
@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 ...
@hmarkus: ... 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
Gruß Volker
Bitte warten ..
Mitglied: nxclass
03.11.2011 um 11:37 Uhr
Kann mir wer sagen was das ist und kann ggf. ein paar Beispiele
01.
/(h[t]{2}p\:\/\/)?[w]{3}\.g[o]{2}gle\.de/
Bitte warten ..
Mitglied: Batchfan
06.11.2011 um 13:26 Uhr
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

Es grüßt, Volker
Bitte warten ..
Mitglied: hmarkus
07.11.2011 um 12:04 Uhr
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

Gruß

Markus
Bitte warten ..
Mitglied: Batchfan
08.11.2011 um 17:11 Uhr
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 ich denke da an "Reguläre Ausdrücke für Dummis ... "

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
Bitte warten ..
Mitglied: nxclass
08.11.2011 um 21:44 Uhr
noch ein Link (zu einem Link zu einem Tutorial) : http://www.administrator.de/index.php?link=2612
Bitte warten ..
Mitglied: Batchfan
09.11.2011 um 18:50 Uhr
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
Bitte warten ..
Mitglied: hmarkus
09.11.2011 um 19:05 Uhr
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
Bitte warten ..
Mitglied: dog
09.11.2011 um 19:08 Uhr
um genau diese auszufiltern ?

01.
/me[iy]er\.txt/
Dateien mit 2 gleiche aufeinanderfolgende Zeichen (cc) zu finden ?

01.
/(.)\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 ?

01.
/^b.*t$/
Bitte warten ..
Mitglied: Biber
09.11.2011 um 19:32 Uhr
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
Bitte warten ..
Mitglied: Batchfan
10.11.2011 um 19:47 Uhr
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.
Danke aber für Euere Mühe und Geduld, wir lesen uns dann nächste Woche wieder.
Herzlichen Gruß, Volker
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...