小编Dir*_*uin的帖子

Perl正则表达式:何时使用$&

我正在学习perl和regex.以下代码:

my $data = "Bule beatles battling a blowing breeze";
my $results = $data =~ m/beatles battling/;
print "results: $results\n";
Run Code Online (Sandbox Code Playgroud)

产生这个输出:

C:\scripts\perl\sandbox>regex.pl
results: 1
Run Code Online (Sandbox Code Playgroud)

通过一个小的改变,我得到了我想要的结果:

print "results: $&\n";
results: beatles battling
Run Code Online (Sandbox Code Playgroud)

我还注意到我不需要创建$ results:

my $data = "Bule beatles battling a blowing breeze";
$data =~ m/beatles battling/;
print "results: $&\n";
Run Code Online (Sandbox Code Playgroud)

在我一直在阅读的各种perl教程中,一些示例使用以下语法:

my $results = $data =~ m/string_to_match/;
Run Code Online (Sandbox Code Playgroud)

我的问题:

  • 应该何时创建$ results而不是直接对$ data进行正则表达式?
  • 当我尝试打印$ data时,为什么会返回"1"?(我认为这是回归比赛的长度...)
  • 创建$ results是否有用?如果不是,我将如何处理多个结果?

例如:

my $data = "Bule beatles battling a blowing breeze";
my $results1 = $data =~ m/beatles/; …
Run Code Online (Sandbox Code Playgroud)

regex perl

2
推荐指数
1
解决办法
5264
查看次数

Perl:在替换正则表达式中指定出现次数

我正在尝试用字符串替换逗号或连字符的所有实例$charlie.这是我最初尝试的代码:

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

my $charlie = "Charlie, 59, 2009";
print "Old Charlie: $charlie\n";
$charlie =~ s/[\,-]/ /;
print "New Charlie: $charlie\n";
Run Code Online (Sandbox Code Playgroud)

这会产生输出:

C:\scripts\perl\sandbox>charlie_substitute.pl
Old Charlie: Charlie, 59, 2009
New Charlie: Charlie  59, 2009
Run Code Online (Sandbox Code Playgroud)

如您所知,只有第一个逗号被空格替换.为了考虑多个逗号,我将正则表达式更改为$charlie =~ s/[\,-]{1,2}/ /;但仍然得到相同的输出.

如何正确指定替换中要查找的出现次数?

regex perl

1
推荐指数
1
解决办法
60
查看次数

Perl:在分裂中转义元字符

我试图使用split()提取值tiefighter.comleia@tiefighter.com.我发现如果@输入字符串中的字符被转义,我得到预期的输出:

$ perl -e '$string = "leia\@tiefighter.com"; @parts = split(/\@/, $string); print "Domain: $parts[-1]\n";'
Domain: tiefighter.com
Run Code Online (Sandbox Code Playgroud)

但是,如果我不逃避@角色,我会得到这个:

$ perl -e '$string = "leia@tiefighter.com"; @parts = split(/\@/, $string); print "Domain: $parts[-1]\n";' 
Domain: leia.com
Run Code Online (Sandbox Code Playgroud)

鉴于我无法预测输入字符串,分割的正确方法是@什么?

perl

1
推荐指数
1
解决办法
367
查看次数

Perl:从子例程返回匿名数组

我试图从子程序返回一个匿名数组,但是,当转储返回的变量时,我只看到一个值(我期待两个).

这是我的代码:

#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my $fruits_ref = generate_fruits();
print "Fruits: " . Dumper($fruits_ref) . "\n";

sub generate_fruits
{
    return ("Apple", "Orange");
}
Run Code Online (Sandbox Code Playgroud)

这输出:

Fruits: $VAR1 = 'Orange';
Run Code Online (Sandbox Code Playgroud)

如何让子程序返回该数组ref?

perl

0
推荐指数
1
解决办法
621
查看次数

标签 统计

perl ×4

regex ×2