Schrift
[thread]5989[/thread]

RegEx: mal wieder... (Seite 2)



<< |< 1 2 >| >> 16 Einträge, 2 Seiten
Crian
 2004-01-05 11:54
#77408 #77408
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
[quote=pktm,29.12.2003, 20:31]
Code: (dl )
if ($zeile !~ /\d*\t\w*\t[\w* ]\t[\w* ]\t[\w* ]\t[\w* ]\t[\w* ]\..{1,4}\n/ ) { $error = 1; }
[/quote]
Ist Dir klar, was [\w* ] heißt?

Vermutlich möchtest Du statt dessen jeweils (?:\w|\s)*.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
pktm
 2004-01-05 18:25
#77409 #77409
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
[\w* ] ist falsch, es müsste [\w ]* heißen.
Es darf allerdings nur das Leerzeichen drin vorkommen, weil ich den Tabstop in dem zu durchsuchenden String als Trennzeichen verwende...
Aber [] dient doch zur Gruppierung von Werten, währen (\w )* doch nach der exakten Reihenfolge \w_ in beliebiger Anzahl sucht, oder?
http://www.intergastro-service.de (mein erstes CMS :) )
Crian
 2004-01-05 21:18
#77410 #77410
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Ja. Nimm dann [\w ]* oder (\w| )*, dann matchen beliebige Ansammlungen von Zeichen inklusive Leerzeichen. Auch 0 Zeichen, ev. möchtest Du + statt * nehmen, um das Vorkommen von mindestens einem Zeichen zu erzwingen.

Beschreib nochmal genau was Du erreichen willst, wir finden schon einen passenden Ausdruck...

Edit: Nach nochmaligem Durchlesen Deines ersten Postings denke ich, dass es mit einer der beiden angegebenen Varianten klappen sollte... berichte mal.

Alternativ kannst Du auch # als Trennzeichen verwenden und wieder \s verwenden.\n\n

<!--EDIT|Crian|1073330776-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
steffenw
 2004-01-05 22:05
#77411 #77411
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Mit [   ] werden Zeichenklassen eingegrenzt also eine Menge von Zeichen. Eine Menge von Zeichen ist auch \w, also erweiterst Du die Menge \w mit dem Leerzeichen. Eine Zeichenklasse steht für ein Zeichen, mit den Wiederholungsfaktoren ? * + oder {2,5} kannst Du bestimmen wie oft der Ausdruck davor vorkommen darf.
(   ) sind speichernde Klammern.
Gruppierende Klammern sehen wie folgt aus: (?:   )
Gruppierende Klammern machen auch Sinn, die Wiederholungsfaktoren auch einen größeren Bereich des Ausdrucks anzuwenden. Weil Du viele Gleichheiten in Deinem Ausdruck hast, kannst Du effektiv gruppierende Klammern einsetzen.
Was ich aber immer noch nicht verstehe, warum braucht man für so etwas einen regulären Ausdruck? Split verwendet doch auch einen kleinen regulären Ausdruck, das Trennzeichen eben.\n\n

<!--EDIT|steffenw|1073333201-->
$SIG{USER} = sub {love 'Perl' or die};
Crian
 2004-01-05 22:48
#77412 #77412
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Er splittet ja nicht, sondern testet, ob die Zeile das gewünschte Format hat. Dazu wird manchmal [\w ]+ und manchmal \d+ und manchmal \w+ verwendet. Jedenfalls verstehe ich es so. Das ist schärfer, als zu splitten und zu sehen, ob die richtige Anzahl Spalten dabei herauskam...
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Strat
 2004-01-09 11:16
#77413 #77413
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=steffenw,03.01.2004, 15:22]... Ich fand das Perl-Tag zwar optisch ansprechender, aber was soll's, ich finde mich damit ab und bin guter Hoffnung, daß das neue Forum besser wird.[/quote]
Den Entwicklungsstand des neuen Forums kannst du dir gerne auf http://develop.perl-community.de/ ansehen. dort kannst du auch gerne testnachrichten schreiben, denn bei der naechsten Datenuebernahme wird eh wieder alles geloescht.
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2004-12-29 21:31.