Bitte verwenden Sie keinen regulären Ausdruck, um XML zu manipulieren. XML ist eine kontextabhängige Sprache. Regex ist nicht, so kann es nie richtig funktionieren. Im besten Fall hast du einen schmutzigen Hack, der eines Tages ohne erkennbaren Grund bricht, weil er Annahmen trifft, die nicht gültig sind.
Verwenden Sie bitte einen Parser. Es ist nicht schwer, aber Sie vermeiden spröde Codes.
Longhand in perl
, es ist:
#!/usr/bin/env perl
use strict;
use warnings;
use XML::Twig;
my $input = "String= Hello World";
my ($tag, $content) = split /=/, $input;
XML::Twig::Elt -> new ($tag, $content) -> print;
Diese Ausgänge:
<String> Hello World</String>
Als ausführlicheres Beispiel:
#!/usr/bin/env perl
use strict;
use warnings;
use XML::Twig;
my $input = "";
my ($tag, $content) = split /=/, $input;
my $doc = XML::Twig->new(pretty_print => 'indented_a') ;
$doc->set_xml_version("1.0");
$doc->set_encoding('utf-8');
$doc->set_root(XML::Twig::Elt->new('root'));
while (<>) {
chomp;
my ($tag, $content) = split /=/;
if ($content =~ m/^B/) {
$doc->root->insert_new_elt('last_child', $tag, $content);
}
}
$doc->print;
Eingabe von:
String= Hello World
tag=B1234 some text here
newtag=fish heads fish heads roly poly fish heads
String=Better fun joy here
Gibt ein Ergebnis von:
<?xml version="1.0" encoding="utf-8"?>
<root>
<String>Better fun joy here</String>
<tag>B1234 some text here</tag>
</root>
Es ist nicht allzu schwer, einen richtigen Parser zu verwenden, und wenn Sie mehr Grund brauchen, dies zu tun: RegEx match open tags except XHTML self-contained tags
Es gibt keine Leerzeichen vor den Schließwinkel Klammern! –
[bearbeiten] Sie Ihre Frage, um einfach eine Beispiel-Eingabedatei anzuzeigen, die beide Fälle enthält, die Sie tun und nicht konvertiert und die zugehörige Ausgabe möchten. –