seth: ReExp

Beitrag lesen

gudn tach!

sieht etwa so aus:
doof;test1;test1;drei
test2;test2;hans;hans;vier
test3;test3;test3;fuenf
test4;test4;hans;peter
karl;tut;tut;lisa
tim;tim ist doof

kommen etwaige mehrfache denn immer direkt hintereinander vor?

mein plan ist jeztt die datei zu durchlaufen und alle n-fachen zu entfernen. ergebnis sollte sein: [...]
tim;ist doof

bei der letzten zeile müsste man wohl auch bedenken, das er von hinten anfängt auszutauschen.

und was sollte im fall
  tim ist doof;tim
passieren? nix? oder tritt sowas nicht auf?

mein ansatz war so in der art:
$line=";".$line;
if($line=~m/(;[^;]+){2}/i)
{
  $line=~s/$1//i;
}

der sammelt aber nur die doppelten weg

bei diesem ansatz muesstest du dann bloss aus dem "if" ein "while" machen. (allerdings behebt das noch nicht die anderen probleme.)

und leider von vorne.

hmm, noe.
aus
  tim;tim ist doof
matcht /(;[^;]+){2}/
  $1=";tim ist doof"

je nach antwort auf meine oben gestellten fragen, wird dir evtl. die folgende variation deines ansatzes weiterhelfen:

for my $line (@lines){  
  $line=';'.$line.';';  
  #while($line=~/(;[^;]+)\1/i){  
  #  $line=~s/($1)$1+./$1;/i;  
  #}  
  #oder u.u. besser mit posisionsmerker:  
  while($line=~/(;[^;]+)(?=\1)/ig){  
    $line=~s/\G$1+./;/i;  
  }  
  $line=substr($line,1,-1);  
  print $line."\n";  
}

zumindest kommt damit fuer das gegebene beispiel genau das raus, was rauskommen soll.

kann mir einer helfen, oder zumindest mal eine ordentliche (bitte deutschsprachige) Seite nennen, wo man in die irrsinnigen weissheiten des pattern matching eingeführt wird.

ich kenne nichts gescheites auf deutsch. die deutschen seiten, die ich kenne, knabbern nur an oberflaechlichkeiten oder winzigen ausschnitten der details.
aber bei regexps ist imho das verstehen einer _englischen_ dokumentation vernachlaessigbar leicht im ggs. zum inhalt, also den regexps selbst.
naja, und versuche, sowas wie "zero-width negative look-behind assertion" gescheit zu uebersetzen sind imho schlichtweg zum scheitern verurteilt. "nach hinten blickende negativ-aussagen mit nulllaenge"?
isch glaub isch muss bresche!
iow: ok, etwas allumfassendes kann es gar nicht geben, aber auf englisch sind viel mehr nuetzliche information ueber regexps zu finden als auf deutsch. und weil regexps so toll sind, tendiere ich sogar zu der meinung, dass sie alleine grund genug sind, sich mal naeher mit der englischen sprache zu befassen, um sie besser studieren zu koennen.

trotzdem: ein sehr gutes buch soll die deutsche uebersetzung von "mastering regular expressions" (http://www.oreilly.de/catalog/regex2ger/) sein.

prost
seth