使用Perl正则表达式从字符串中分离XML内容

使用Perl正则表达式从字符串中分离XML内容,xml,regex,perl,Xml,Regex,Perl,我有以下字符串,其中包含以(\n)分隔的文本。我希望使用正则表达式匹配xml内容,删除所有空格并\n并将其转换为一行。我使用了以下正则表达式: my $string = "this contains the text which I pasted below in before section"; $string=~ m/(^.*)(<[a-zA-Z]*>)/; $extractedXml = $2; my$string=“这包含我在下面的before部分粘贴的文本”; $stri

我有以下字符串,其中包含以(\n)分隔的文本。我希望使用正则表达式匹配xml内容,删除所有空格并\n并将其转换为一行。我使用了以下正则表达式:

my $string = "this contains the text which I pasted below in before section";
$string=~ m/(^.*)(<[a-zA-Z]*>)/;
$extractedXml = $2;
my$string=“这包含我在下面的before部分粘贴的文本”;
$string=~m/(^.*)()/;
$extractedXml=$2;
为什么上面的代码没有得到XML内容

之前:

G11N/Locale=en_USY:/default/main/test1/test/test2/test4/test5/default.site
G11N/Localizable=true
TeamSite/Assocation/Version=1
TeamSite/LiveSite/DeploymentAudit=<?xml version="1.0" encoding="UTF-8"?>
<Deployments>
    <test>hello</test>
</Deployments>
Y:/default/main/test1/test/test2/test4/test5/default.site
G11N/Locale=en_US
G11N/Localizable=true
TeamSite/Assocation/Version=1
TeamSite/LiveSite/DeploymentAudit=<?xml version="1.0" encoding="UTF-8"?><Deployments><test>hello</test></Deployments>
G11N/Locale=en_USY:/default/main/test1/test/test2/test4/test5/default.site
G11N/可本地化=真
TeamSite/Association/Version=1
TeamSite/LiveSite/DeploymentAudit=
你好
之后:

G11N/Locale=en_USY:/default/main/test1/test/test2/test4/test5/default.site
G11N/Localizable=true
TeamSite/Assocation/Version=1
TeamSite/LiveSite/DeploymentAudit=<?xml version="1.0" encoding="UTF-8"?>
<Deployments>
    <test>hello</test>
</Deployments>
Y:/default/main/test1/test/test2/test4/test5/default.site
G11N/Locale=en_US
G11N/Localizable=true
TeamSite/Assocation/Version=1
TeamSite/LiveSite/DeploymentAudit=<?xml version="1.0" encoding="UTF-8"?><Deployments><test>hello</test></Deployments>
Y:/default/main/test1/test/test2/test4/test5/default.site
G11N/Locale=en_US
G11N/可本地化=真
TeamSite/Association/Version=1
TeamSite/LiveSite/DeploymentAudit=hello


您可以在此处检查它是否有效,但在实际代码中,它仅与第一行匹配。

对于您的示例,以下解决方案有效:

my $string = <<"FOO";
G11N/Locale=en_USY:/default/main/test1/test/test2/test4/test5/default.site
G11N/Localizable=true
TeamSite/Assocation/Version=1
TeamSite/LiveSite/DeploymentAudit=<?xml version="1.0" encoding="UTF-8"?>
<Deployments>
    <test>hello</test>
</Deployments>";
FOO

$string =~ s/^\s+(<.+$)/$1/gm;
$string =~ s/>\n/>/gm;

print $string;
my$string=您可以使用:

my ($xml) = $string =~ m!(<Deployments>.*?</Deployments>)!gis;
my($xml)=$string=~m!(.*?)!地理信息系统;

注意。

您的正则表达式与文本完全不匹配。看见如果添加一个
/m
修改器,它将至少与第一个标记
匹配。但是,它不能匹配
或任何结束标记,因为您允许除letters.xml以外的任何其他内容。xml可以是任何内容,不仅从部署开始检查它在这里工作,而且在实际代码中它只匹配第一行检查它在这里工作,但在实际代码中它只匹配第一行在这种情况下,请告诉我们。