Ausdruck aus Variablen bilden

Aus den Variablen $1 - $5 soll ein Zeichenausdruck gebildet werden. Dazu
sollen aus jeder Variablen ein Zeichen mit dem Zeichen der nächsten
zusammengekettet werden, etwa so

Var Inh. entn.Zeichen
$1 Anders 4 = e
$2 geht 3 = h
$3 es 1 = e
$4 heute 9 = -
$5 nicht 7 = -

Der entstandene String wäre ehe--, da es in Variable 4 und 5 das 9. bzw
7. Zeichen nicht gibt.

Ich bitte um Hilfe beim bilden diese RegEx-Ausdrucks, den ich für ein
php-Skript benötige.

Dank für die Anregungen

Hans
Hans Winkler [ Di, 20 Juni 2006 08:02 ] [ ID #1363365 ]

Re: Ausdruck aus Variablen bilden

Ich vergaß (regex) in den Betreff zu stellen. Sorry!

Hans Winkler schrieb:
> Aus den Variablen $1 - $5 soll ein Zeichenausdruck gebildet werden. Dazu
> sollen aus jeder Variablen ein Zeichen mit dem Zeichen der nächsten
> zusammengekettet werden, etwa so
>
> Var Inh. entn.Zeichen
> $1 Anders 4 = e
> $2 geht 3 = h
> $3 es 1 = e
> $4 heute 9 = -
> $5 nicht 7 = -
>
> Der entstandene String wäre ehe--, da es in Variable 4 und 5 das 9. bzw
> 7. Zeichen nicht gibt.
>
> Ich bitte um Hilfe beim bilden diese RegEx-Ausdrucks, den ich für ein
> php-Skript benötige.
>
> Dank für die Anregungen
>
> Hans
Hans Winkler [ Di, 20 Juni 2006 08:52 ] [ ID #1363366 ]

Re: Ausdruck aus Variablen bilden

Thus spoke Hans Winkler (on 2006-06-20 08:02):

> Aus den Variablen $1 - $5 soll ein Zeichenausdruck gebildet werden. Dazu
> sollen aus jeder Variablen ein Zeichen mit dem Zeichen der nächsten
> zusammengekettet werden, etwa so
>
> Var Inh. entn.Zeichen
> $1 Anders 4 = e
> $2 geht 3 = h
> $3 es 1 = e
> $4 heute 9 = -
> $5 nicht 7 = -
>

Ich verstehe das problem nicht ganz. Warum
würde man einen Regex für eine solche
einfache Aufgabe nehmen?

my [at] var=qw{
Anders
geht
es
heute
nicht
};

my [at] p=qw{
4
3
1
9
7
};

print
map{
(split //, $var[$_])[ $p[$_]-1 ]
} 0 .. [at] p-1;



liefert: ehe

Oder gibt es "in wirklichkeit" eine
komplexere Aufgabenstellung?

Oder "muss es" aus edukatorischen
Gründen eine Regex sein?


Viele Grüße

Mirco
Mirco Wahab [ Di, 20 Juni 2006 09:33 ] [ ID #1363367 ]

Re: Ausdruck aus Variablen bilden

Mirco Wahab schrieb:
> Thus spoke Hans Winkler (on 2006-06-20 08:02):
>
>> Aus den Variablen $1 - $5 soll ein Zeichenausdruck gebildet werden. Dazu
>> sollen aus jeder Variablen ein Zeichen mit dem Zeichen der nächsten
>> zusammengekettet werden, etwa so
>>
>> Var Inh. entn.Zeichen
>> $1 Anders 4 = e
>> $2 geht 3 = h
>> $3 es 1 = e
>> $4 heute 9 = -
>> $5 nicht 7 = -
>>
>
> Ich verstehe das problem nicht ganz. Warum
> würde man einen Regex für eine solche
> einfache Aufgabe nehmen?
>
> my [at] var=qw{
> Anders
> geht
> es
> heute
> nicht
> };
>
> my [at] p=qw{
> 4
> 3
> 1
> 9
> 7
> };
>
> print
> map{
> (split //, $var[$_])[ $p[$_]-1 ]
> } 0 .. [at] p-1;
>
>
>
> liefert: ehe
>
> Oder gibt es "in wirklichkeit" eine
> komplexere Aufgabenstellung?
>
> Oder "muss es" aus edukatorischen
> Gründen eine Regex sein?

Dank für die schnelle Antwort, aber dabei verstehe ich gar nichts. Nehme
an, da ich in der Perl-Gruppe gepostet habe, ist es Perl?

Damit habe ich mich überhaupt noch nicht beschäftigt.

Ein Formular soll mittels PHP ausgewertet werden, in diesem Fall wird
aus den angegebenen Daten ein Passwort generiert.

Hans
Hans Winkler [ Di, 20 Juni 2006 09:57 ] [ ID #1363368 ]

Re: Ausdruck aus Variablen bilden

Thus spoke Hans Winkler (on 2006-06-20 09:57):

> Dank für die schnelle Antwort, aber dabei verstehe ich gar nichts.
> Nehme an, da ich in der Perl-Gruppe gepostet habe, ist es Perl?

Richtig, Perl ;-)

> Ein Formular soll mittels PHP ausgewertet werden, in diesem Fall wird
> aus den angegebenen Daten ein Passwort generiert.

Ach so.

OK, aber wenn Du mit der eher einfachen
split-Lösung nichts anfangen kannst, warum
soll es dann noch eine Regex-Lösung sein? ;-)

z.B. (in Perl):

my [at] var = qw{ Anders geht es heute nicht };
my [at] p = qw{ 4 3 1 9 7 };

my ($k, %ht);
[at] ht{ [at] var} = [at] p; # eine Lookup-Table für Zeichenpositionen bilden

my $rx = qr/(??{ # 'deferred evi^hal assertion'
$k = $ht{$_}-1; # hole Zeichenposition aus %ht
"(?<=\\S{$k})" # erzeuge neuen Regex als
}) # lookbehind mit \S{N} Zeichen
(\S) # erfasse Zeichen, was danach kommt
/x;

my $password = join '',
map { m/$rx/ } [at] var;

print $password; # prints 'ehe'

Wenn es in PHP kein split gibt (was ich nicht glaube),
dann sollte es auf jeden Fall 'substring' oder sowas
geben, was aufs selbe hinausläuft.

So richtig verstehe ich Dein Problem
immer noch nicht (den Kontext).


Viele Grüße

Mirco
Mirco Wahab [ Di, 20 Juni 2006 11:29 ] [ ID #1363372 ]

Re: Ausdruck aus Variablen bilden

Mirco Wahab schrieb:
> Thus spoke Hans Winkler (on 2006-06-20 09:57):
>
>> Dank für die schnelle Antwort, aber dabei verstehe ich gar nichts.
>> Nehme an, da ich in der Perl-Gruppe gepostet habe, ist es Perl?
>
> Richtig, Perl ;-)
>
>> Ein Formular soll mittels PHP ausgewertet werden, in diesem Fall wird
>> aus den angegebenen Daten ein Passwort generiert.
>
> Ach so.
>
> OK, aber wenn Du mit der eher einfachen
> split-Lösung nichts anfangen kannst, warum
> soll es dann noch eine Regex-Lösung sein? ;-)
>
> z.B. (in Perl):
>
> my [at] var = qw{ Anders geht es heute nicht };
> my [at] p = qw{ 4 3 1 9 7 };
>
> my ($k, %ht);
> [at] ht{ [at] var} = [at] p; # eine Lookup-Table für Zeichenpositionen bilden
>
> my $rx = qr/(??{ # 'deferred evi^hal assertion'
> $k = $ht{$_}-1; # hole Zeichenposition aus %ht
> "(?<=\\S{$k})" # erzeuge neuen Regex als
> }) # lookbehind mit \S{N} Zeichen
> (\S) # erfasse Zeichen, was danach kommt
> /x;
>
> my $password = join '',
> map { m/$rx/ } [at] var;
>
> print $password; # prints 'ehe'
>
> Wenn es in PHP kein split gibt (was ich nicht glaube),
> dann sollte es auf jeden Fall 'substring' oder sowas
> geben, was aufs selbe hinausläuft.
>
> So richtig verstehe ich Dein Problem
> immer noch nicht (den Kontext).

Hallo Mirco, Du hast mich auf den richtigen Weg gebracht.
split() gibt es natürlich auch in php. "map" dagegen nicht. Wie auch immer.
Aus den zurückgegebenen Variablen für $Vname, $name, $tel etc. soll ein
Passwort generiert werden. RegEx wäre der richtige Weg, aber Du hast
recht es geht ja auch anders.

Gruß und Dank
Hans
Hans Winkler [ Di, 20 Juni 2006 11:51 ] [ ID #1363375 ]

Re: Ausdruck aus Variablen bilden

Hans Winkler!

> Aus den zurückgegebenen Variablen für $Vname, $name, $tel etc. soll
> ein Passwort generiert werden. RegEx wäre der richtige Weg, aber Du
> hast recht es geht ja auch anders.

Wie kommst Du darauf? Reguläre Ausdrücke eignen sich zum Beschreiben von
Mustern, die gesucht werden sollen. Einzelne Zeichen aus einem String
anhand ihrer Position auslesen geht besser mit anderen Mitteln.

Der perl-Operator map heißt in php übrigens array_map().


Gruß
Daniel
Daniel Fischer [ Di, 20 Juni 2006 14:24 ] [ ID #1363378 ]

Re: Ausdruck aus Variablen bilden

Hans Winkler wrote:
> Aus den Variablen $1 - $5 soll ein Zeichenausdruck gebildet werden. Dazu
> sollen aus jeder Variablen ein Zeichen mit dem Zeichen der nächsten
> zusammengekettet werden, etwa so
>
> Var Inh. entn.Zeichen
> $1 Anders 4 = e
> $2 geht 3 = h
> $3 es 1 = e
> $4 heute 9 = -
> $5 nicht 7 = -

substr($1, 4-1, 1) gibt das 4. Zeichen im String $1.
Und wo soll der Regex jetzt hin?

MP
Michael Perle [ Di, 20 Juni 2006 09:45 ] [ ID #1365110 ]

Re: Ausdruck aus Variablen bilden

Hans Winkler wrote:
> Dank für die schnelle Antwort, aber dabei verstehe ich gar nichts. Nehme
> an, da ich in der Perl-Gruppe gepostet habe, ist es Perl?
>
> Damit habe ich mich überhaupt noch nicht beschäftigt.
>
> Ein Formular soll mittels PHP ausgewertet werden, in diesem Fall wird
> aus den angegebenen Daten ein Passwort generiert.

Zur Passwort-Generierung gibt es sicher auch
passende Perl-Module. :-)
Michael Perle [ Di, 20 Juni 2006 10:18 ] [ ID #1365111 ]
Perl » de.comp.lang.perl.misc » Ausdruck aus Variablen bilden

Vorheriges Thema: Alle Anfangsbuchstaben als Großbuchstaben
Nächstes Thema: Unicode Emails vom Server als HTML files sichern oder so aehnlich..