如何在Perl中的两个特定符号之间选择文本?

时间:2019-02-26 20:55:18

标签: perl

我是Perl的新手。我目前正在检查这个Perl文件,并使用了在另一个stackflow问题中找到的这一行,在此变量中对其进行了格式化,以获取“ <”符号后的所有文本。

($tempVariable) = $Line =~ /(\<.*)\s*$/;

因此,当前每当我打印此变量时,我都会得到输出

$tempVariable = <some text here      @typeOf and more text here after

我需要获取介于“ <”符号和“ @”符号之间的所有内容。

我尝试查看其他堆栈流问题,并尝试将其实施到矿井中,但是我不断收到错误消息,因此,如果有人可以帮助我,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

my ($substr) = $str =~ /<([^<\@]*)\@/
   or die "No match";

答案 1 :(得分:0)

您需要一个正则表达式

  • 寻找开始的<字符
  • 然后(您的问题目前尚不清楚)
    • 捕获一个或多个非@字符,或者
    • 捕获零个或多个非@字符
  • 寻找结尾的@字符
  • 您的问题中也未指定:您是否需要从比赛中删除开头和结尾的空白?

#!/usr/bin/perl
use warnings;
use strict;

my $Line = '<some text here      @typeOf and more text here after';
my $tempVariable;

# alternative 1: one-or-more characters
($tempVariable) = $Line =~ /<([^@]+)@/
   or die "No match alternative 1";
print "Alternative 1: '${tempVariable}'\n";

# alternative 2: zero-or-more characters
($tempVariable) = $Line =~ /<([^@]*)@/
   or die "No match alternative 2";
print "Alternative 2: '${tempVariable}'\n";

exit 0;

试运行(不删除空白):

$ perl dummy.pl
Alternative 1: 'some text here      '
Alternative 2: 'some text here      '