Schrift
[thread]12150[/thread]

regulärer Ausdruck

Leser: 1


<< >> 3 Einträge, 1 Seite
theresa
 2008-07-08 21:03
#111954 #111954
User since
2007-07-17
90 Artikel
BenutzerIn
[default_avatar]
Hi Leute,
Habe gerade einen reg. Ausdruck gefunden um Verzeichnis vom Dateinamen zu trennen (hier den ganzen Code),
Code: (dl )
1
2
3
my($text) = "/etc/sysconfig/network-scripts/ifcfg-eth0";
my($directory, $filename) = $text =~ m/(.*\/)(.*)/;
print "D=$directory, F=$filename\n";

Habe versucht z.B. dass in $directory nur / rauskommt, und der Rest im Dateinamen, das geht mit
Code: (dl )
m/(.*?\/)(.*)/;

Die Ausgabe:
D=/, F=etc/sysconfig/network-scripts/ifcfg-eth0

Jetzt wollte ich noch ein Experiment machen... klappt aber nicht. Wie bekomme ich in D nur die ersten zwei Verzeichnisse und den Rest in F?
habe es versucht mit
Code: (dl )
m/(.*\/{2})(.*)/;

geht aber nicht.

Mir geht es darum zu verstehen wie man das {2} da richtig einsetzen kann, will den Ausdruck nicht großartig verändern...
murphy
 2008-07-08 21:08
#111955 #111955
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Für solche Manipulation würde ich statt komplexer aber unportabler regulärer Ausdrücke lieber das Kernmodul CPAN:File::Spec benutzen...
When C++ is your hammer, every problem looks like your thumb.
murphy
 2008-07-08 21:13
#111957 #111957
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
theresa+2008-07-08 19:03:50--
[...]
Code: (dl )
m/(.*\/{2})(.*)/;

[...]
Mir geht es darum zu verstehen wie man das {2} da richtig einsetzen kann, will den Ausdruck nicht großartig verändern...


Der Wiederholungsoperator muss hinter die Gruppenklammer damit der richtige Teil der Eingabe aufgefangen wird:
Code: (dl )
m/(.*\/){2}(.*)/;


Damit ausserdem die richtigen Rückgabewerte von m// erzeugt werden, musst Du eine weitere Gruppe einführen:
Code: (dl )
m/((?:.*\/){2})(.*)/;
When C++ is your hammer, every problem looks like your thumb.
<< >> 3 Einträge, 1 Seite



View all threads created 2008-07-08 21:03.