reguläre ausdrücke?
supermario
- perl
Hallo!
Ich habe hier gestern super Hilfe erhalten, als ich wissen wollte wie man alle Wörter, die mit "t" beginnen in einem Text findet und markiert. Wenn du das liest danke nochmal Christian ! :)
Habe diesen reg. Ausdruck bekommen, der auch super funktioniert hat:
$text =~ s!(?:^|\s)(t\S+)!<b>$1</b>!g;
Jetzt habe ich mal versucht den zu entschlüsseln, bin aber nicht wirklich auf einen grünen Zweig gekommen. Habe zwar mit Selfhtml und diversen Suchmaschinen einiges rausgefunden, aber ein paar Sachen, wie zb. die Bedeutung der Zeichen in der 1. Klammer habe nicht finden können.
Kann mir vielleicht jemand erklären was der Doppelpunkt oder das Fragezeichen da bedeuten ?
Und warum statt den Slashes Rufzeichen aussen stehen ?
Und warum alles in Klammern steht ?
Ich danke schon vielmals, falls mir das jemand etwas veranschaulichen kann.
use Mosche;
Habe diesen reg. Ausdruck bekommen, der auch super funktioniert hat:
$text =~ s!(?:^|\s)(t\S+)!<b>$1</b>!g;
Ersetzt:
Zeilenanfang ODER Leerezeichen DANACH t UND eins oder mehr Satzzeichen
Durch:
'<b>', das Wort mit t und die Satzzeichen danach, '</b>'
Kann mir vielleicht jemand erklären was der Doppelpunkt oder das Fragezeichen da bedeuten ?
Normalerweise sind Klammern da, um den gefundenen Inhalt in \1, \2, (bzw. $1, $2, ...) zu speichern. '?:' veranlasst Perl, den Inhalt nicht zu speichern.
Und warum statt den Slashes Rufzeichen aussen stehen ?
Das ist egal (naja, nicht ganz). Es ist manchmal übersichtlicher, ein anderes Begrenzungszeichen zu verwenden als '/'.
Und warum alles in Klammern steht ?
s.o., um den Inhalt zu speichern.
use Tschoe qw(Matti);
danke für die Hilfe jetzt kenn ich mich schon besser aus :)
Heisst das, dass der gefundene String nur dann auch gespeichert wird, wenn Klammern um den regulären Ausdruck stehen ?
Wie könnte ich es so einstellen, dass auch eventuell gefundene Leerzeichen am Anfang mitgespeichert werden, damit ich es auch mit Leerzeichen am Anfang ausgeben kann?
use Mosche;
Heisst das, dass der gefundene String nur dann auch gespeichert wird, wenn Klammern um den regulären Ausdruck stehen ?
Ja.
Wie könnte ich es so einstellen, dass auch eventuell gefundene Leerzeichen am Anfang mitgespeichert werden, damit ich es auch mit Leerzeichen am Anfang ausgeben kann?
$text =~ s!(\s*[Tt]\S+)!<b>$1</b>!g;
Ersetzt
beliebig viele Leerzeichen (oder keins) danach ein kleines oder grosses t (das bedeutet [tT]), danach eins oder mehr Wortzeichen
durch
'<b>', den gesamten Gefundenen String, '</b>'
use Tschoe qw(Matti);
1000 facher dank!! :)
hi!
use Mosche;
Can't locate Mosche.pm in @INC (@INC contains: /usr/libdata/perl/5.00503/mach /u
sr/libdata/perl/5.00503 /usr/local/lib/perl5/site_perl/5.005/i386-freebsd /usr/l
ocal/lib/perl5/site_perl/5.005 .).
BEGIN failed--compilation aborted.
$text =~ s!(?:^|\s)(t\S+)!<b>$1</b>!g;
Zeilenanfang ODER Leerezeichen DANACH t UND eins oder mehr Satzzeichen
\S ist kein Satzzeichen, sondern ein Nicht-Whitespace. Und Whitespaces
(\s) sind all die Zeichen, die man nicht sehen kann... ;)
bye, Frank!
use Mosche qw/8-)/;
\S ist kein Satzzeichen, sondern ein Nicht-Whitespace. Und Whitespaces
meinte ich doch. Das du einen auch immer verbessern musst ... 8-)
use Tschoe qw(Matti);