Reguläre Ausdrücke
Gustl
- perl
Ich hab ständig probleme mit dem Ausschlussverfahren, wenn es also NUR bestimmte Zeichen sein dürfen. Finde alle möglichen Beispiele, das aber nicht.
Meine Liste enthält aktuell Verzeichnisse. Ich brauch alle Verzeichnisse die NUR aus Zahlen bestehen und sonst nichts.
my @nurzahlen = grep (/[AUSDRUCK]/,@alles);
--
Theorie: Alles ist möglich - Praxis: Nix funzt - Ich bin eben ein Mann der Praxis
[0-9]* sollte funktionieren.
[0-9]* sollte funktionieren.
so klappts übrigens nicht rafael. das gibt einfach alles aus wo mehrere zahlen hintereinander vorkommen, unabhängig davon ob davor oder danach noch andere zeichen stehen.
gudn tach!
[0-9]* sollte funktionieren.
so klappts übrigens nicht rafael. das gibt einfach alles aus wo mehrere zahlen
...oder nur eine oder keine...
hintereinander vorkommen, unabhängig davon ob davor oder danach noch andere zeichen stehen.
iow: /[0-9]*/ ist fuer jeden string, auch fuer den leeren "true".
prost
seth
Hi,
Meine Liste enthält aktuell Verzeichnisse. Ich brauch alle Verzeichnisse die NUR aus Zahlen bestehen und sonst nichts.
versuchs mal mit /^\d+$/
^ Stringanfang
\d eine Ziffer
+ das vorherige (hier eine Ziffer) mindestens einmal
$ Stringende
mfG,
steckl
also:
^ Stringanfang
findet das erste zeichen
\d eine Ziffer
prüft ob das eine ziffer ist
+ das vorherige (hier eine Ziffer) mindestens einmal
geht zum nächsten zeichen und vergleicht ob das vorherige diesem entspricht
$ Stringende
macht das ganze bis zum string-ende
... hab ich das richtig kapiert ? funzen tuts !
also:
^ Stringanfang
findet das erste zeichen\d eine Ziffer
prüft ob das eine ziffer ist+ das vorherige (hier eine Ziffer) mindestens einmal
geht zum nächsten zeichen und vergleicht ob das vorherige diesem entspricht$ Stringende
macht das ganze bis zum string-ende... hab ich das richtig kapiert ?
ich glaube nicht.
^ besagt, dass das naechste Zeichen am Stringanfang stehen muss.
\d steht fuer eine Ziffer (alternativ kann auch [0-9] geschrieben werden)
+ bezieht sich hier auf das "\d".
\d+ heisst also, dass eine bis beliebig viele Ziffern die hintereinanderstehen gefunden werden
$ heisst, dass das letzte Zeichen das letzte Zeichen des Strings sein muss.
mfG,
steckl
^ besagt, dass das naechste Zeichen am Stringanfang stehen muss.
das ist für mich schon unlogisch. ein nächstes zeichen kann doch nie am anfang stehen. ist ja das erste, nicht das nächste.
\d steht fuer eine Ziffer (alternativ kann auch [0-9] geschrieben werden)
das ist klar, kenne ich beides
+ bezieht sich hier auf das "\d".
\d+ heisst also, dass eine bis beliebig viele Ziffern die hintereinanderstehen gefunden werden
ist auch klar als einzelner ausdruck.
$ heisst, dass das letzte Zeichen das letzte Zeichen des Strings sein muss.
verwirrt mich. kann ein letztes zeichen auch das vorletzte sein ?
ich werd das NIE kapieren. ich kann wohl nur mechanisch denken. vor allem das zusammenspiel des gesamten ausdrucks geht mir vollständig verloren :(
lass gut sein, funktionieren tuts, das ist die hauptsache. danke schön steckl.
gustl
^ besagt, dass das naechste Zeichen am Stringanfang stehen muss.
das ist für mich schon unlogisch. ein nächstes zeichen kann doch nie am anfang stehen. ist ja das erste, nicht das nächste.
mit dem naechsten Zeichen meinte ich das naechste Zeichen aus dem regExp (hier \d).
^ steht fuer garkein Zeichen im String, sondern sagt nur, dass das was in dem regExp steht ganz vorne in dem zu durchsuchenden String stehen muss.
$ heisst, dass das letzte Zeichen das letzte Zeichen des Strings sein muss.
verwirrt mich. kann ein letztes zeichen auch das vorletzte sein ?
$ steht hier genau wie ^ fuer garkein Zeichen, sondern fuer das Ende des Strings.
Ohne ^ und $ koennte das Pattern also ueberall im String stehen. Mit ^ und $ muss das Pattern auf den ganzen String passen.
ich werd das NIE kapieren. ich kann wohl nur mechanisch denken. vor allem das zusammenspiel des gesamten ausdrucks geht mir vollständig verloren :(
Wenn der String "abc123" ist passt /^\d+$/ nicht, weil die Folge von Ziffern nicht am Anfang des Strings steht. /\d+$/ wuerde aber passen, da hier das Pattern nicht am Anfang stehen muss.
lass gut sein, funktionieren tuts, das ist die hauptsache. danke schön steckl.
einmal versuch ichs noch ;)
mfG,
steckl
Wenn der String "abc123" ist passt /^\d+$/ nicht, weil die Folge von Ziffern nicht am Anfang des Strings steht. /\d+$/ wuerde aber passen, da hier das Pattern nicht am Anfang stehen muss.
na dann stimmts doch ! der ausdruck kuckt sich das erste zeichen an (von mir aus auch das naechste erste) obs eine zahl ist ^\d . \d+ sucht eine beliebige weitere "zahlenfolge". ist der schluss $ auch ne zahl ists true. somit müssen alle werte zwischen ^ und $ zahlen sein.
sorry, ANDERS kapier ichs nicht. das ist für mich "mechanisch zum anfassen, zukucken und die finger reinstecken obs weh tut".
habt Erbarmen, jeder hat wohl SEINE art die dinge zu verstehen. in meiner jungend gabs noch keine Computer, bin deshalb auch über kleine siege stolz.
Gustl
habt Erbarmen, jeder hat wohl SEINE art die dinge zu verstehen. in meiner jungend gabs noch keine Computer, bin deshalb auch über kleine siege stolz.
dann kannst jetzt stolz sein, denn ich denke du hast es (zumindest in diesem Fall ;) kapiert.
gudn tach!
vielleicht hilft dir http://de.selfhtml.org/perl/sprache/regexpr.htm weiter.
^ besagt, dass das naechste Zeichen am Stringanfang stehen muss.
das ist für mich schon unlogisch. ein nächstes zeichen kann doch nie am anfang stehen. ist ja das erste, nicht das nächste.
stell dir vor, du bist ein regexp-parser, dem der folgende string[1] zu fressen gegeben wird.
.
___ _ .- ___ , _ , _ ,___, | ___
.' \,' /
|' |'
. | \ | .' |----' /\ | | | | | | | | |----'
.___, / \ .\_\_/| / ' / |
---' /\__ `.___,
\
dann faengst du gaaanz links an:
.
___ _ .- ___ , _ , _ ,___, | ___
.' \,' /
|' |'
. | \ | .' |----' /\ | | | | | | | | |----'
.___, / \ .\_\_/| / ' / |
---' /\__ `.___,
\
^ da.
dann ist das naechste zeichen ein 'e'. ;-)
$ heisst, dass das letzte Zeichen das letzte Zeichen des Strings sein muss.
verwirrt mich. kann ein letztes zeichen auch das vorletzte sein ?
aeh, ja, aber darum geht's hier afais nicht.
/^\w+$/
wuerde nach dem letzten zeichen pruefen, ob der string zu ende ist.
.
___ _ .- ___ , _ , _ ,___, | ___
.' \,' /
|' |'
. | \ | .' |----' /\ | | | | | | | | |----'
.___, / \ .\_\_/| / ' / |
---' /\__ `.___,
\
$ da.
ich werd das NIE kapieren. ich kann wohl nur mechanisch denken.
regexp sind ziemlich mechanisch.
vor allem das zusammenspiel des gesamten ausdrucks geht mir vollständig verloren :(
prost
seth
[1] danke an http://www.network-science.de/ascii/. der string soll halt einfach stark vergroessert wirken.
vielleicht hilft dir http://de.selfhtml.org/perl/sprache/regexpr.htm weiter.
schönen dank, die regexpr hab ich mir schon des öfteren versucht reinzuziehen :) nach 5 minuten macht es tilt bei mir. mechanisch war vielleicht nicht der ganz richtige ausdruck. ich revidiere auf räumlich-mechanisch, dem bewegten keilriemen bis zum ursprung folgend folgernd verstehen ...
übrigens hab ichs jetzt einigermassen gecheckt dank dir und steckl.
Gustl