Schrift
[thread]6057[/thread]

Regex-Problem mit Backreferences (Seite 2)



<< |< 1 2 3 4 5 >| >> 45 Einträge, 5 Seiten
DemoFreak
 2004-02-04 15:47
#79769 #79769
User since
2003-09-06
54 Artikel
BenutzerIn
[default_avatar]
Ich benötige hauptsächlich die Informationen von weiter hinten, den Anfang der Zeile habe ich nur deshalb gepostet, um das Problem zu verdeutlichen. Genaugenommen geht es mir um eben jenen String, der weiter hinten entweder gar nicht da ist, oder aber aus vielen leerzeichengetrennten Worten und Symbolen besteht (ist eine Ereignisbeschreibung).
Gruss, Hannes
renee
 2004-02-04 16:00
#79770 #79770
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dann mach doch sowas in der Richtung:
Code: (dl )
1
2
my $string = 'h040111.233001.gz bfb4e2e0-41f7-71d8-1c34-0aa0093f0000 cb32393c-5603-71d7-1bec-0aa01c1b0000 1 178260287 24 einrechner.einedomain.de 1 178260287 Und noch ein Teil, der wichtig ist!';
my @array = split(/\s/,$string,10);

Dann hast Du die Teile von vorne als einzelne Elemente des Arrays und den Rest (was ich hier noch eingefügt habe im $string) dann komplett im letzten Element...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Crian
 2004-02-04 16:01
#79771 #79771
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
ich würd es trotzdem splitten und das Array dann wieder korrigieren.

Wenn da eine Null steht weißt Du ja, dass ein Element fehlt. Dann füg einfach ein leeres ein.

Wenn da eine 216 steht und das nächste Element keine 216 Elemente hast, spliced Du das übernächste raus und joinst es mit ' ' ans nächste, solange, bis das lang genug ist.\n\n

<!--EDIT|Crian|1075903322-->
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
pq
 2004-02-04 16:10
#79772 #79772
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Crian,04.02.2004, 13:48]Also $2 wird auf gar keinen Fall gehen, wenn Du im Suchteil schon auf gefangene Teile zugreifen willst, musst Du die Backslashvariante nehmen.[/quote]
das ist so nicht ganz richtig, denn mittels (?{ code }) kann man das:
perl -wle '$_=23; m/(\d)(?{print "($1)"})/;'
(2)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
DemoFreak
 2004-02-04 16:17
#79773 #79773
User since
2003-09-06
54 Artikel
BenutzerIn
[default_avatar]
[quote=renee,04.02.2004, 15:00]Dann mach doch sowas in der Richtung:
Code: (dl )
1
2
my $string = 'h040111.233001.gz bfb4e2e0-41f7-71d8-1c34-0aa0093f0000 cb32393c-5603-71d7-1bec-0aa01c1b0000 1 178260287 24 einrechner.einedomain.de 1 178260287 Und noch ein Teil, der wichtig ist!';
my @array = split(/\s/,$string,10);

Dann hast Du die Teile von vorne als einzelne Elemente des Arrays und den Rest (was ich hier noch eingefügt habe im $string) dann komplett im letzten Element...[/quote]
Es sind mehrere Strings variabler Länge, und der, der mich hauptsächlich interessiert, steht hinter einigen anderen, die entweder da sein können oder auch nicht.
Gruss, Hannes
DemoFreak
 2004-02-04 16:18
#79774 #79774
User since
2003-09-06
54 Artikel
BenutzerIn
[default_avatar]
[quote=Crian,04.02.2004, 15:01]ich würd es trotzdem splitten und das Array dann wieder korrigieren.

Wenn da eine Null steht weißt Du ja, dass ein Element fehlt. Dann füg einfach ein leeres ein.

Wenn da eine 216 steht und das nächste Element keine 216 Elemente hast, spliced Du das übernächste raus und joinst es mit ' ' ans nächste, solange, bis das lang genug ist.[/quote]
Da komm ich jetzt grade nicht ganz mit ;)
Könntest Du mir mal eine Richtung bzw. ein Snippet geben?
Gruss, Hannes
DemoFreak
 2004-02-04 16:20
#79775 #79775
User since
2003-09-06
54 Artikel
BenutzerIn
[default_avatar]
[quote=pq,04.02.2004, 15:10][quote=Crian,04.02.2004, 13:48]Also $2 wird auf gar keinen Fall gehen, wenn Du im Suchteil schon auf gefangene Teile zugreifen willst, musst Du die Backslashvariante nehmen.[/quote]
das ist so nicht ganz richtig, denn mittels (?{ code }) kann man das:
perl -wle '$_=23; m/(\d)(?{print "($1)"})/;'
(2)
[/quote]
Eben eben. Das habe ich ja zum Testen (s.o.) auch so verwendet. Trotzdem will der Ausdruck .{$2} nix davon wissen, was im Capture 2 steht. Der Ausdruck .{\2} geht übrigens genausowenig.
Gruss, Hannes
DemoFreak
 2004-02-04 16:31
#79776 #79776
User since
2003-09-06
54 Artikel
BenutzerIn
[default_avatar]
Ich geb euch mal 2 Zeilen der Datei, die ein ganz klein wenig demonstrieren, was da gebraucht wird:

Code: (dl )
1
2
h040101.233001.gz fa16b610-3893-71d8-1c34-0aa0093f0000 d287f7ba-a52f-71d6-0d98-0aa01c1b0000 1 178260287 24 einrechner.einedomain.de 1 178260287 24 einrechner.einedomain.de 0 0 8 0 0 0 1072546921 1072546922 32 9 1 178260287 24 einrechner.einedomain.de 0 0 12 0 0 0  0 0 1072679082 7 hv7sapo 12 mk8chksr_moP 8 Reporter 4 KP_A 8 mk8chkds 0  77 cmd /c "%PERL%\perl.exe %ITOEXE%\actions\mk8rsds.pl -s reporter -p reportsvc" 0  57 Der Dienst/Prozess des Service Reporters ist nicht aktiv! 45 mk8chksr_moP:  2,00 (Threshold 0,90 exceeded) 0 0  0 0 0 0 0 0 0  0  0 0 000000000000000000000000000000000000 -3600 0  0  0  0  0 1072546922 0 
h040103.233002.gz badedc70-3b36-71d8-1378-0aa0093f0000 660cf46a-c80a-71d7-0975-0aa01c1b0000 1 178260287 24 einrechner.einedomain.de 1 178260287 24 einrechner.einedomain.de 0 0 2 0 0 0 1072836725 1072836727 4 12 0 0 0  0 0 12 0 0 0  0 0 1072852220 7 hv7sapo 9 mk8kp_mtp 3 WWW 4 KP_A 8 mk8mvrep 0  0  0  174 UNMATCHED: 01011 Fehler beim Umbenennen von ''e:\webpages\BetVerw\M$Verfuegbarkeit Servergruppen$68967941' nach 'e:\webpages\BetVerw\M$Verfuegbarkeit Servergruppen$74050071'' 281 Node:          


Ich hoffe, die Leerzeichen sind alle erhalten geblieben.
Gruss, Hannes
renee
 2004-02-04 16:50
#79777 #79777
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wenn Du jetzt noch markieren könntest, was Du brauchst, wäre es einfacher ;)
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
DemoFreak
 2004-02-04 17:24
#79778 #79778
User since
2003-09-06
54 Artikel
BenutzerIn
[default_avatar]
Das ist eines meiner Probleme: im Grunde genommen benötige ich erstmal alle Strings variabler Länge (auch wenn sie in den beiden Beispielzeilen teilweise nur durch 0\s vertreten sind), weil mir das Format dieser Meldungen noch nicht ganz klar ist (da sind einige Zeitangaben und Usernames, und auch einige optionale Strings wie Annotations Operator initiated actions drin, die es nicht bei jeder Meldung gibt) und ich über einen grossen Zeitraum alle Meldungen betrachten muss, um einen schiefgelaufenen Vorgang nachvollziehen zu können. Das kann man zwar im Textfile auch halbwegs erkennen, aber das stehen die Zeitangaben nur im Format "Sekunden seit 1.1.1970" drin, und das wollte ich schon ein wenig verschönern. Daher sah ich keinen anderen Ansatz, als mir alle variablen Strings jeweils mit Backrefs rauszuangeln, dazu hat der Verursacher (HP btw. :D) diese Längenangaben ja schliesslich auch reingeschrieben, denke ich. ;)
Gruss, Hannes
<< |< 1 2 3 4 5 >| >> 45 Einträge, 5 Seiten



View all threads created 2004-02-04 14:37.