Ausdruck aus Variablen bilden
Ausdruck aus Variablen bilden
am 20.06.2006 08:02:10 von Hans Winkler
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
Re: Ausdruck aus Variablen bilden
am 20.06.2006 08:52:52 von Hans Winkler
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
Re: Ausdruck aus Variablen bilden
am 20.06.2006 09:33:04 von Mirco Wahab
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 @var=qw{
Anders
geht
es
heute
nicht
};
my @p=qw{
4
3
1
9
7
};
print
map{
(split //, $var[$_])[ $p[$_]-1 ]
} 0 .. @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
Re: Ausdruck aus Variablen bilden
am 20.06.2006 09:45:42 von Michael Perle
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
Re: Ausdruck aus Variablen bilden
am 20.06.2006 09:57:30 von Hans Winkler
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 @var=qw{
> Anders
> geht
> es
> heute
> nicht
> };
>
> my @p=qw{
> 4
> 3
> 1
> 9
> 7
> };
>
> print
> map{
> (split //, $var[$_])[ $p[$_]-1 ]
> } 0 .. @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
Re: Ausdruck aus Variablen bilden
am 20.06.2006 10:18:27 von Michael Perle
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. :-)
Re: Ausdruck aus Variablen bilden
am 20.06.2006 11:29:10 von Mirco Wahab
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 @var = qw{ Anders geht es heute nicht };
my @p = qw{ 4 3 1 9 7 };
my ($k, %ht);
@ht{@var} = @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/ } @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
Re: Ausdruck aus Variablen bilden
am 20.06.2006 11:51:51 von Hans Winkler
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 @var = qw{ Anders geht es heute nicht };
> my @p = qw{ 4 3 1 9 7 };
>
> my ($k, %ht);
> @ht{@var} = @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/ } @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
Re: Ausdruck aus Variablen bilden
am 20.06.2006 14:24:28 von Daniel Fischer
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