Schrift
[thread]7619[/thread]

Regex aus Variable auswerten

Leser: 2


<< >> 10 Einträge, 1 Seite
bluescarab
 2006-01-13 13:57
#61884 #61884
User since
2006-01-13
1 Artikel
BenutzerIn
[default_avatar]
Hallo

Ich möchte gerne eine Regex aus einer Variablen auf einen String anwenden. Gedacht habe ich mir das etwa so:
$regex = 's/.*/replaced/gi';
$text = 'original';
$text =~ $regex;

So einfach funktioniert's leider nicht. Aber wie dann? Habe fleißig Tutorials und FAQs gelesen, auch in der perldoc gestöbert, aber nix gefunden.

Gruß,
Alex
Relais
 2006-01-13 14:08
#61885 #61885
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ändere die erste Zeile in
Code: (dl )
$regex = qr!s/.*/replaced/gi!;
und es funktioniert. Steht vermutlich in perldoc perlop oder aber auch in einer von den folgenden perldoc perlre, perldoc perlretut ... weiß gerade nicht, hab nicht nachgeschaut.

Update: hatte qx geschrieben und qr gemeint. Sorry!

Leider funktioniert es auch nicht. Komisch... war vor der Mittagspause, zu lange her um sich noch dran zu erinnern...\n\n

<!--EDIT|Relais|1137157516-->
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
Taulmarill
 2006-01-13 14:20
#61886 #61886
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
für regexe benutzt man nicht qx{} sonder qr{}. qx{} ist der operator zum ausführen von systemgefehlen, verhält sich ähnlich wie backtics.

wenn du den regex nur als text bekommst, sollte folgendes auch funktionieren (ungetestet):
Code: (dl )
$text =~ qr{ $regex };


dokumentiert ist das in perlop unter "Quote and Quote-like Operators"
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Taulmarill
 2006-01-13 14:26
#61887 #61887
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
ich hab noch was vergessen:

qr{} ist nur für patterns, s/// ist aber eine substitution mit zwei patterns. folgendes währe möglich.

Code: (dl )
1
2
3
4
my $muster = qr{.*};
my $ersatz = 'replaced';
my $text = 'original';
$text =~ s/$muster/$ersatz/;


eine komplette substitution kann man afaik nicht in einer variable speichern.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Strat
 2006-01-13 15:38
#61888 #61888
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
nein, hoechstens mit einem string-eval oder vielleicht besser in einer coderef...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Crian
 2006-01-16 14:09
#61889 #61889
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Code: (dl )
1
2
3
4
my $var = 'blubb';
my $re = qr~$var~;
my $txt = 'blubber blub blubb';
$txt =~ s~$re~schnapp~g;


Ergebnis: 'schnapper blub schnapp'

oder einfacher:

Code: (dl )
1
2
3
my $var = 'blubb';
my $txt = 'blubber blub blubb';
$txt =~ s~$var~schnapp~g;


mit gleichem Ergebnis. Hinweisen muss man dabei dann noch auf \Q...\E.\n\n

<!--EDIT|Crian|1137413551-->
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
renee
 2006-01-17 06:01
#61890 #61890
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@Crian: Hat ja schon Taulmarill vorgeschlagen, waehrend das von dem OP gewuenschte wohl nicht geht...
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/
morph
 2006-01-17 10:25
#61891 #61891
User since
2007-12-06
79 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi,

man kann ein komplette Substitution nicht in Variables speicherrn, soviel ich weiß. Aber das ist doch auch gar nicht nötig.
Code: (dl )
1
2
3
my $pattern = "foo\sbar";
my $replace = "FirstUniversalCyberneticKeneticUltramicroProgrammer";
$pattern =~ s#$pattern#$replace#;

Damit habe ich alles was ich brauche.

Aber vielleicht habe ich auch irgend etwas misTverstanden, dann klärt mich bitte auf.

-uw
renee
 2006-01-17 11:42
#61892 #61892
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
jepp, wurde schon gesagt... Aber warum versuchst Du im $pattern das $pattern zu ersetzen??
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/
morph
 2006-01-17 14:04
#61893 #61893
User since
2007-12-06
79 Artikel
BenutzerIn
[Homepage] [default_avatar]
Jo, war in der Tat ein bisl blöd formuliert. :blush:
<< >> 10 Einträge, 1 Seite



View all threads created 2006-01-13 13:57.