在Perl中的符号后提取字符串

时间:2015-10-20 09:39:37

标签: regex string perl split

如何在Perl中的符号后提取字符串?

我尝试过一些搜索,但即使是我发现的代码也没有用。

我试图在冒号后提取字符串。所以我想在冒号之后展示一切。

示例:

string = day1: string over here

substring = string over here

到目前为止,我已经尝试过:

$substring = $string=~ /(\:.*)\s*$/;

但它只会反复输出数字1。

3 个答案:

答案 0 :(得分:9)

那是因为标量上下文中的模式匹配是布尔测试。如果要捕获括号内容(捕获组),则需要列表上下文。如果列表只是一个元素,那就没问题了:

试试这个:

 my ( $substring ) = $string=~ /(\:.*)\s*$/;

差异可能有点微妙,但基本上 - 我们正在分配所有的点击量'从模式匹配到列表......包含一个元素。

注意 - 您可以这样做:

my @matches = $string =~ m/(.)/g; 

获得多次点击'回。如果你这样做,你将只获得第一场比赛 - 这与你的模式无关,但你可以这样做:

my ( $key, $value ) = $string =~ m/(\w+)=(\w+)/; 
例如,

答案 1 :(得分:3)

我通常使用括号从文本中提取部分,然后引用存储在$ 1变量中的结果。

看例子:

my $text = "day1: string over here";

print $1 if ($text =~ /:\s*(.+)$/);

但也可以通过此代码收到类似的结果:

my $text = "day1: string over here"; 

my ($a) = $text =~ /:\s*(.+)$/;
print $a;

答案 2 :(得分:1)

您也可以使用split函数来实现欲望子字符串:

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

my $string = "day1: string over here";

my (undef, $substring) = split(':\s*', $string);

print $substring, "\n";

输出:

string over here

或者您可以通过在正则表达式中使用捕获组()来实现此目的:

my $string = "day1: string over here";
$string =~ m/(.*)\:\s+(.*)$/;
my $substring = $2;
print $substring, "\n";