在Perl中使用正则表达式替换xml标记内的多行字符串

用户名

我一直在尝试使它工作但没有运气。这是我的文本文件(first.txt)

<metric>
 <baseFilter>
  <and>
   <or>
    <value field="id">1111</value>
    <value field="id">2222</value>
   </or>
   <or>
    <value field="resolution" />
   </or>
</metric>

我想用第二个文本文件(second.txt)的这些字符串替换第一个“ or”和“ / or”之间的字符串。我可以在第一个“或”和“ /或”之间有50条或更多条值字段行,因此,我正在搜索“或”和“ /或”之间的字符串,并用second.txt中的任何内容替换。

<value field="id">3333</value>
<value field="id">4444</value>

预期产量:

<metric>
 <baseFilter>
  <and>
   <or>
    <value field="id">3333</value>
    <value field="id">4444</value>
   </or>
   <or>
    <value field="resolution" />
   </or>
</metric>

我已经获得了以下perl代码。

#!/usr/bin/perl

my $first = 'first.txt';
open (my $fh, '<', $first) or die "cannot open file $first";
{
  local $/;
  $first = <$fh>;
}

$find = "([\s]+)(<or>)([\n\r\s]+).*(\n|.)+?([\n\r\s]+)(<\/or>)";

my $content = 'second.txt';
open (my $fh, '<', $content) or die "cannot open file $content";
{
 local $/;
 $content = <$fh>;
}

$first =~ s/$find/$1$2$3$content$5$6/;
print "After sub First is $first\n\n";

当我运行代码时,不会发生替换,并且我的$ first保持不变,即first.txt再次出现。我想念什么?我在在线正则表达式测试器(例如http://www.regexr.com/)中使用了正则表达式,我的正则表达式匹配第一个“或”和“ /或”之间的多行字符串。为什么perl不喜欢我的正则表达式?

我惊异了外星人

通过捕获所有这些XML片段,您使比赛中的事情变得过于复杂。以下正则表达式是执行替换的一种简单得多的方法:

$first =~ s#(<or>\s+)<value field="id">.*?</value>(\s*</or>)#$1$content$2#sm;

我使用了修饰符sm,它们可以匹配多行,并允许.包含换行符。因此我们可以替换<or>开始标记和结束标记之间的任何数量的行我还使用#了正则表达式的分隔符,因此不必费力在XML close标记中转义斜线。

有关正则表达式(尤其是修饰符)的更多信息,请参见perlre

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用要在反向索引中使用的正则表达式匹配Ruby中的多行字符串?

来自分类Dev

用正则表达式捕获多行字符串并用其替换,每行缩进

来自分类Dev

使用正则表达式在Perl中的html字符串中查找和替换xml标签

来自分类Dev

PHP正则表达式/搜索并替换多个文件中的多行字符串

来自分类Dev

如何使用Shell或Perl替换包含正则表达式元字符的字符串?

来自分类Dev

如何在Perl中使用正则表达式grep字符串?

来自分类Dev

大文件上的多行正则表达式匹配字符串替换

来自分类Dev

在字符串javascript中使用正则表达式替换

来自分类Dev

在Python中使用正则表达式替换模式的字符串

来自分类Dev

如何在python中使用正则表达式替换字符串的多个单词?

来自分类Dev

正则表达式匹配并用多行Python替换字符串

来自分类Dev

使用正则表达式替换字符串

来自分类Dev

使用Perl正则表达式将XML内容与字符串分开

来自分类Dev

在记事本++中使用正则表达式替换的字符串值

来自分类Dev

在Scala中使用正则表达式从字符串中提取所有标记

来自分类Dev

使用perl替换一列文本中的字符串的正则表达式

来自分类Dev

如何制作与多行字符串中的标记匹配的正则表达式?

来自分类Dev

正则表达式以匹配多行字符串

来自分类Dev

在C#中使用正则表达式查找和替换子字符串

来自分类Dev

正则表达式分割多行字符串

来自分类Dev

使用正则表达式标记字符串

来自分类Dev

大文件上的多行正则表达式匹配字符串替换

来自分类Dev

在字符串javascript中使用正则表达式替换

来自分类Dev

使用正则表达式替换字符串

来自分类Dev

字符串使用正则表达式替换正则表达式字符类

来自分类Dev

正则表达式匹配多行字符串中的多个元标记

来自分类Dev

使用正则表达式替换字符串;

来自分类Dev

在 Javascript 中使用正则表达式替换字符串

来自分类Dev

如何在命令行中使用 perl 替换正则表达式多行 dotall

Related 相关文章

  1. 1

    如何使用要在反向索引中使用的正则表达式匹配Ruby中的多行字符串?

  2. 2

    用正则表达式捕获多行字符串并用其替换,每行缩进

  3. 3

    使用正则表达式在Perl中的html字符串中查找和替换xml标签

  4. 4

    PHP正则表达式/搜索并替换多个文件中的多行字符串

  5. 5

    如何使用Shell或Perl替换包含正则表达式元字符的字符串?

  6. 6

    如何在Perl中使用正则表达式grep字符串?

  7. 7

    大文件上的多行正则表达式匹配字符串替换

  8. 8

    在字符串javascript中使用正则表达式替换

  9. 9

    在Python中使用正则表达式替换模式的字符串

  10. 10

    如何在python中使用正则表达式替换字符串的多个单词?

  11. 11

    正则表达式匹配并用多行Python替换字符串

  12. 12

    使用正则表达式替换字符串

  13. 13

    使用Perl正则表达式将XML内容与字符串分开

  14. 14

    在记事本++中使用正则表达式替换的字符串值

  15. 15

    在Scala中使用正则表达式从字符串中提取所有标记

  16. 16

    使用perl替换一列文本中的字符串的正则表达式

  17. 17

    如何制作与多行字符串中的标记匹配的正则表达式?

  18. 18

    正则表达式以匹配多行字符串

  19. 19

    在C#中使用正则表达式查找和替换子字符串

  20. 20

    正则表达式分割多行字符串

  21. 21

    使用正则表达式标记字符串

  22. 22

    大文件上的多行正则表达式匹配字符串替换

  23. 23

    在字符串javascript中使用正则表达式替换

  24. 24

    使用正则表达式替换字符串

  25. 25

    字符串使用正则表达式替换正则表达式字符类

  26. 26

    正则表达式匹配多行字符串中的多个元标记

  27. 27

    使用正则表达式替换字符串;

  28. 28

    在 Javascript 中使用正则表达式替换字符串

  29. 29

    如何在命令行中使用 perl 替换正则表达式多行 dotall

热门标签

归档