Thread RegExp aus Hash bauen mit Named Matches (2 answers)
Opened by zilpzalp at 2013-09-22 00:43

zilpzalp
 2013-09-22 00:43
#170472 #170472
User since
2012-08-04
4 Artikel
BenutzerIn
[default_avatar]
Hallo Forum,

ich möchte in einem Text automatisierte Textersetzungen mit regulären Ausdrücken machen. Dabei möchte ich die Definitionen für die Patterns in einem Hash(Ref) definieren. Außerdem benötige ich Named Matches, um innerhalb der gefundenen Textfragmente auf Teilinformationen zugreifen zu können.

Ich habe mal ein exemplarisches Beispiel erstellt, wie ich mir das derzeit vorstelle:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/perl

use strict;
use warnings;

my $text;
while(<DATA>)
{
  $text=$text.$_;
}

my $repl={
  foo_bar => { is => "foo", by => "bar" },
  MS    => { is => "rock", by => "suck" },
  id      => { is => "\{id\}(?<id>[^\{]+)\{\/id\}", by => "ID: $+{id}" },  
};

foreach my $p (keys $repl)
{
  $text =~ s/$repl->{$p}->{'is'}/$repl->{$p}->{'by'}/g;
}

print $text, "\n";

__DATA__

My name is foo, yes foo.
{id}1234{/id}
Microsoft rocks!


Problem: Leider funktioniert das mit den Named Matches ($+{id}) nicht. Die Ausgabe ist:

Code: (dl )
1
2
3
My name is bar, yes bar.
ID:
Microsoft sucks!


Habt Ihr da eine Idee?

Vielen Dank und viele Grüße,
ziplzalp
Last edited: 2013-09-22 00:47:20 +0200 (CEST)

View full thread RegExp aus Hash bauen mit Named Matches