PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PERL - RegEx - Auf Nicht-Ende prüfen?



sticky bit
23-02-2006, 18:59
Angenommen ich habe einen String, der aus mehreren Zeilen besteht und ich möchte diesen Einrücken.


$string =
'\
Ich bin eine Zeile.\
Und ich auch.\
Na und ich erst recht!\
';


Ich hatte die Idee einfach nach jedem Newline die Einrückung einzufügen (dass die erste Zeiel nicht eingerückt wird ist OK). Nur Leider ist dann nach dem allerletzten Newline, dem ja keine Zeile mehr folgt auch noch die Einrückung.


$string =~ s/\n/\n\t/g;


Nun Frage ich mich, ob es nicht irgendwie geht auf das Ende im negierten Sinn zu erkennen. Ich meine /\n$/ würde ja nur den Newline am Ende finden, wenn man das umgekehrt machen könnte also finde alle Newlines nur nicht das am Ende?

P. S.: Durch die Einrückung bin ich auf die Idee gekommen, es ist aber eigentlich wurst weil das nur fürn Wegwerf-Skript war und ich die Einrückung zu viel am Ende einfach wieder abgeschnitten habe.
Mag sein, dass es vielleicht andere Lösungen dazu geben mag, etwa mit split() und join(), aber da bin ich nicht drauf aus, mir gehts eigentlich nur aus informativen Gründen um das Ende!

Caveman
23-02-2006, 19:51
Folgt auf das letzte Newline noch irgendwas?
Wenn nicht könntest Du es vielleicht so versuchen:

$string =~ s/\n(?=.)/\n\t/g;

ohne Gewähr. Hab's nicht getestet.

nic
24-02-2006, 19:13
s/^(?!$)/\t$&/mg;

sollte es eigentlich auch tun denke ich :)

Joghurt
27-02-2006, 13:56
Und wieder mal wird Perl seinem Ruf als Write-Only-Language gerecht...

Caveman
27-02-2006, 16:46
@Joghurt:
Sag doch so was nicht.
In meiner Diplomarbeit benutze ich in Zusammenhang mit Perl objektorientierte Programmierung und damit wird's schön übersichtlich und Änderungen können leicht getätigt werden.

reneeb
28-02-2006, 07:54
Und wieder mal wird Perl seinem Ruf als Write-Only-Language gerecht...

Das sind ganz normale Reguläre Ausdrücke, die es auch in anderen Sprachen gibt (nur etwas erweitert)...

Joghurt
28-02-2006, 14:21
Eben. Und Erweiterungen wie (?!$) in Verbindung mit der restlichen Perlsyntax ergeben solch schönen Konstrukte wie

$string~=s/^(?!$)/\t$&/mg;

Nichts gegen perl, wer damit zurechtkommt, soll es nutzen. Ich bin allerdings inzwischen zu Python gewechselt.

@Caveman: Hast du dir schonmal ruby angeschaut? Lehnt sich an die Perlsyntax ist, ist aber von Grund auf Objektorientiert. Ich würd's mir mal anschauen, wenn dir Pythons "strikte" Syntax nicht zusagt.

nic
03-03-2006, 12:45
Ich persoenlich finde Perl fuer den taeglichen Gebrauch und kleinere Scripte sehr brauchbar und spaetestens mit Einfuehrung der OOP geht es auch durchaus fuer groessere Sachen, und wenns denn mal auf die Performance ankommt ist sowieso C die erste Wahl.
Die von dir kritisierte Les- und Wartbarkeit haengt uebrigens praktisch ausschliesslich vom Programmierer ab, da Perl inzwischen sogar Kommentare unterstuetzt ;)
Wenn ich grossere Sachen schreibe die auch spaeter noch verstaendlich oder von anderen Personen verwaltet werden muessen, verzichte ich eben auf die in Scripten und one-Linern so beliebten Minimierungen...

btw, muss uebriegens =~ nicht ~= heissen :p

so far...