| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
McAldo Chief Petty Member


Anmeldedatum: 24.10.2003 Beiträge: 42 Wohnort: Terra / Sol-System / Milchstraße
|
Verfasst am: 08.02.2010, 17:53 Titel: [irgendwie gelöst] Kürzen von Zeichenketten - mit RegEx |
|
|
Hallo, ich habe eine Variable (wird vorher durch eine foreach "gefüllt") mit folgendem Inhalt:
oder
text kann dabei 1 - n Zeichen lang sein. n sollte aber maximal nur 250 Zeichen betragen. Ich finde leider nicht die richtige Syntax um das mit RegEx hinzubekommen und weiß auch nicht so richtig, wonach ich suchen soll. :/
Mein bisheriger Versuch:
| Code: | | $field =~ s/(")?(.{,250})(")?/$1$2$3/; |
Ich habe ein an einer Stelle weit mehr als 250 Zeichen eingetragen, die werden auch weiter alle ausgegeben.
Wie ist die richtige Syntax, dass die Ersetzung so erfolgt, dass nur noch 250 Zeichen entweder zwischen den " " steht, oder alleine in der Variablen?
McAldo
Zuletzt bearbeitet von McAldo am 09.02.2010, 10:24, insgesamt einmal bearbeitet |
|
| Nach oben |
|
 |
abgdf Senior Chief Petty Member

Anmeldedatum: 04.10.2005 Beiträge: 85
|
Verfasst am: 09.02.2010, 02:32 Titel: |
|
|
| Code: | | $field = substr($field, 0, 250); |
ungetestet ... |
|
| Nach oben |
|
 |
McAldo Chief Petty Member


Anmeldedatum: 24.10.2003 Beiträge: 42 Wohnort: Terra / Sol-System / Milchstraße
|
Verfasst am: 09.02.2010, 09:09 Titel: |
|
|
Das ist schon gut, aber nicht ganz richtig, da ein eventuell vorhandenes " am Ende mit weggekürzt wird.
McAldo
Zuletzt bearbeitet von McAldo am 09.02.2010, 09:16, insgesamt einmal bearbeitet |
|
| Nach oben |
|
 |
Crian Master Chief Member


Anmeldedatum: 10.11.2003 Beiträge: 1140 Wohnort: Bielefeld
|
Verfasst am: 09.02.2010, 09:09 Titel: |
|
|
Das Problem an deiner Regexp ist, dass er nur ersetzt, wenn der Text die Voraussetzungen erfüllt, ansonsten wird nicht ersetzt. Insofern bleibt der Ausgangstext immer einfach so, wie er ist.
Vielleicht wäre eine Längenprüfung auf > 252 Zeichen ein Anfang? Dann kannst du noch analysieren, ob vorn und hinten Anführungszeichen sind. _________________ Perl Community - Perlmongers - Perl Monks - meine Perlseite |
|
| Nach oben |
|
 |
McAldo Chief Petty Member


Anmeldedatum: 24.10.2003 Beiträge: 42 Wohnort: Terra / Sol-System / Milchstraße
|
Verfasst am: 09.02.2010, 09:23 Titel: |
|
|
| Crian hat Folgendes geschrieben: |
Vielleicht wäre eine Längenprüfung auf > 252 Zeichen ein Anfang? Dann kannst du noch analysieren, ob vorn und hinten Anführungszeichen sind. |
Naja, das lässt sich sicher in einer RegEx machen, dass man auf die Zeichenkette innerhalb " " prüft (falls " " vorhanden) und dann entsprechend kürzt. Ich bekomm das aber nicht mehr zusammen. Zu langer her, seit ich das mal gemacht habe.
McAldo |
|
| Nach oben |
|
 |
McAldo Chief Petty Member


Anmeldedatum: 24.10.2003 Beiträge: 42 Wohnort: Terra / Sol-System / Milchstraße
|
Verfasst am: 09.02.2010, 10:22 Titel: |
|
|
So, ich habe das jetzt ganz umständlich gelöst. Vielleicht kann ich das irgendwann wieder besser. So ein Script wird ja immer massiv verändert, wenn man sich das nach einer Weile nochmal anschauen und dann den nutzlosen Code entfernt.
| Code: |
my $count_char = "250";
if ( $field =~ /^\".+\"$/ ) {
$field =~ /^\"(.+)\"$/;
my $text = $1;
$text = substr($text, 0, $count_char);
$field = "\"$text\"";
} else {
$field = substr($field, 0, $count_char);
}
|
McAldo |
|
| Nach oben |
|
 |
abgdf Senior Chief Petty Member

Anmeldedatum: 04.10.2005 Beiträge: 85
|
Verfasst am: 10.02.2010, 16:55 Titel: |
|
|
| McAldo hat Folgendes geschrieben: | | So, ich habe das jetzt ganz umständlich gelöst. |
Das seh' ich anders: Ich find's viel besser als eine lange, kryptische RegEx, die dann 'eh keiner mehr lesen kann.
Man muß auch sehen: Die RegEx-Engine von Perl5 ist nicht 100%ig sicher, da sich kaum noch jemand mit ihr beschäftigt, weil für Perl6 alles neu geschrieben wird.
Tatsächlich gibt es also nur noch ganz wenige Leute, die verstehen, was Perl5 überhaupt macht, wenn es eine RegEx interpretiert. Schon gruselig ...
Gruß
Edit: Wollt' meine Aussagen noch belegen: Einmal hier, "What's Wrong with Perl 5":
| Zitat: | | Perhaps the biggest imperfection of Perl 5 is its internals. Though much of the design is clever, there are also places of obsolescence and interdependence, as well as optimizations that no one remembers, but no one can delete without affecting too many other parts of the system. Refactoring an eleven-plus-year-old software project that runs on seventy-odd platforms and has to retain backwards compatibility with itself on many levels is daunting, and there are few people qualified to do it. It's also exceedingly difficult to recruit new people for such a task. |
und
http://dev.perl.org/perl6/doc/design/apo/A05.html
| Larry hat Folgendes geschrieben: | In fact, regular expression culture is a mess, and I share some of the blame for making it that way ...
unfortunately, there's a lot of regex culture that needs breaking ...
Regex culture has gone wrong in a variety of ways ... |
|
|
| Nach oben |
|
 |
pq Ensign


Anmeldedatum: 01.10.2003 Beiträge: 1578 Wohnort: ick bin eine berlinerin
|
Verfasst am: 12.02.2010, 15:35 Titel: |
|
|
abgdf: soweit ich das verstanden habe, wurden für 5.10 grosse teile der regex-engine neu geschrieben, daher sind deine aussagen zu perl 5 zumindest bzgl. der regex-engine nicht mehr wirklich aktuell.
zur sicherheit: wieviele bugs hast du denn so in den letzten jahren gezählt in der perl5 regex engine?  _________________ kommt rüber zu perl-community.de - das unzensierte, trollfreie perl-forum mit wiki, faq, scripts, links
lesen: perlintro! |
|
| Nach oben |
|
 |
|