Schrift
[thread]6960[/thread]

Regulären Ausdruck als Übergabe aus Formular



<< |< 1 2 3 >| >> 27 Einträge, 3 Seiten
Gast Gast
 2005-05-04 14:27
#54570 #54570
Hallöchen Allerseits,
weiss jemand wie ich einen Regulären Ausdruck als Stringeingabe in einem Perl programm wirksam machen kann?
Aus dem Html-Formular übergebe ich den Eintrag in einen String, beim Aufruf des selbigen wendet er aber den Inhalt nicht als regulären Ausdruck an :|
???
Riffi
Ronnie
 2005-05-04 14:47
#54571 #54571
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
qr - könnte hilfreich sein, ansonsten könnte auch ein eval-Block helfen.
pKai
 2005-05-04 15:19
#54572 #54572
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Sollte eigentlich kein Problem sein.
Zur genauen Diagnose von "beim Aufruf des selbigen wendet er aber den Inhalt nicht als regulären Ausdruck an" wäre es natürlich hilfreich, wenn du den Code dieses Aufrufs posten würdest.

Tangent: Die Sicherheitsprobleme, die das von die beschriebene Vorgehen mit sich bringt, sind dir klar? Der Anwender kann zum Bsp. mit (?{...}) Perl-Code in seinen "regulären Ausdruck" einbetten.\n\n

<!--EDIT|pKai|1115205633-->
I sense a soul in search of answers.
Dubu
 2005-05-04 16:04
#54573 #54573
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=pKai,04.05.2005, 13:19]Tangent: Die Sicherheitsprobleme, die das von die beschriebene Vorgehen mit sich bringt, sind dir klar? Der Anwender kann zum Bsp. mit (?{...}) Perl-Code in seinen "regulären Ausdruck" einbetten.[/quote]
Wenn das an Ronnie gerichtet war: Stimmt, qr// und eval sind in diesem Zusammenhang recht gefährlich.

Aber nur die Verwendung von Benutzereingaben ist nicht gleich gefährlich, siehe perlre:

[quote=perlre,"(?{ code })"]For reasons of security, this construct is forbidden if the regular expression involves run-time interpolation of variables, unless the perilous "use re 'eval'" pragma has been used (see re), or the variables contain results of "qr//" operator (see "qr/STRING/imosx" in perlop).
[/quote]
Gast Gast
 2005-05-04 16:27
#54574 #54574
danke erstmal für die antworten..
aaaalso ich hab folgendes simples mini-micro Prog sowei:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
## Zuweisung der Werte zu den Variablennamen
$string = $Formular[1];
$regexstring = $Formular[3];

$regex = qr/$regexstring/;

foreach ($string)
{
$regexstring;
}
$output = $string;

ergibt aber keinen output....

edit renee: ne Runde [code]-Tags spendiert\n\n

<!--EDIT|renee|1115209825-->
renee
 2005-05-04 16:32
#54575 #54575
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was soll das Programm machen? Zeig mal mehr Code?
Verwende Wiki:strict
Code: (dl )
1
2
3
foreach($string){
 $regexstring;
}

Was denkst Du, was hier gemacht wird??\n\n

<!--EDIT|renee|1115209966-->
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/
Gast Gast
 2005-05-04 16:41
#54576 #54576
da hoffe ich versteht die cgi: "für jede Eingabe aus Formularfeld1 also gespeichert in $String, wende einen regulären Ausdruck an, welcher in $regexstring steht."
renee
 2005-05-04 16:50
#54577 #54577
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
*) Du machst die Schleife über ein Element -> Schleife kann man weglassen
*) So wie Du das da stehen hast, kommt folgende Warnung:
Quote
Useless use of private variable in void context at skript.pl line 11.

*) Was soll der Reguläre Ausdruck denn machen?
*) Am Ende weist Du $string $output zu, ohne mit $string was gemacht zu haben...
*) Machst Du in dem kurzen Ausschnitt keine Ausgabe...
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/
Gast Gast
 2005-05-04 17:08
#54578 #54578
den thread habe ich gestartet, demnach steht ganz oben was ich mach will. Nämlich eine Stringeingabe zu einem regulären Ausdruck machen. Dazu verwende ich $regex = qr/$regexstring/; ob das so richtig ist, weiß ich net. Ein internal server error kriege ich allerdings nicht.
Crian
 2005-05-04 17:31
#54579 #54579
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
[quote=renee,04.05.2005, 14:50]*) Du machst die Schleife über ein Element -> Schleife kann man weglassen
[/quote]
Ich denke, die Absicht dahinter ist, dass durch die Schleife im Schleifeninneren $_ auf die Variable $String verweist und deshalb ein entsprechender regulärer Ausdruck mit Substitution den Inhalt von $String ändert. In diesem Fall ist die Schleife also nicht egal. Man könnte aber auch direkt "$String =~" hinschreiben und dafür die Schleife weglassen.


Du musst allerdings Perl noch sagen, dass es sich bei dem Inhalt von $regexstring um einen regulären Ausdruck handelt.

Angenommen in $regenxstring steht sowas wie 's~a~b~g', musst Du diesen z.B. als eval ausführen.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#! /usr/bin/perl
use strict;
use warnings;

my $re = 's~a~b~g';
my $test = 'abcabcabc';

for ($test) {
eval "$re";
}

print $test;


Ausgabe:

Code: (dl )
bbcbbcbbc
\n\n

<!--EDIT|Crian|1115213941-->
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
<< |< 1 2 3 >| >> 27 Einträge, 3 Seiten



View all threads created 2005-05-04 14:27.