如何找到基于第一个字符串的第二个字符串缺少的内容?

时间:2018-11-05 20:38:01

标签: regex perl

$ a =“ fddf \ n dfdf \ n eeee \ n“

$ b =“ fddf \ n dfdf \ n pppp \ n erww \ n“

输出应为“ eeee \ n”,因为第二个字符串中缺少该输出。我曾想过使用perl正则表达式,但是它不能告诉我第二个字符串中缺少什么。

1 个答案:

答案 0 :(得分:1)

首先:始终使用严格和警告,不要在种类之外使用$a$b,它们是special

use strict;
use warnings;
my $x = " fddf\n dfdf\n eeee\n";
my $y = " fddf\n dfdf\n pppp\n erww\n";
my @x_chars = split //, $x;
my @y_chars = split //, $y;
my @missing_chars;
while (@x_chars and @y_chars) {
  my $next = shift @x_chars;
  if ($next eq $y_chars[0]) {
    shift @y_chars;
  } else {
    push @missing_chars, $next;
  }
}
push @missing_chars, @x_chars;
my $missing = join '', @missing_chars;

如所提到的,String::Diff(Algorithm :: Diff的包装器)等CPAN模块将在您的需求变得更加复杂时提供更简单,更全面的解决方案。