`
weihe6666
  • 浏览: 441878 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

perl-捕获变量

    博客分类:
  • Perl
阅读更多
perl-捕获变量


1.捕获变量

捕获的功能指的是:把圆括号中模式所匹配的部分字符串暂时记忆下来的能力。如果有一对以上的圆括号。就会有一次以上的捕获。每个被捕获的对象是原本的字符串,而不是模式。

因为捕获标量存储的都是字符串,所以他们都是标量变量。 在Perl中,被捕获的字符串被存储在$1,$2,$3....中。

Perl 的正则表达式中如果出现 () ,则发生匹配或替换后 () 内的模式被 Perl 解释器自动依次赋给系统 $1, $2 ......

请看下面的例子:
$string = "I love perl";
$string =~ s/(love)/<$1>/; # 此时 $1 = "love",并且该替换的结果是将 $string 变为 "I <love> perl"
$string = "i love perl";
$string =~ s/(i)(.*)(perl)/<$3>$2<$1>/; # 这里 $1 = "i",$2 = " love ",$3 = "perl",并且替换后 $string 变为 "<perl> love <i>"

2.不捕获模式

面前所见的圆括号都会捕获部分的匹配串到捕获量($1,$2,....),但是有时候却需要关闭这个功能,而仅仅是用来对他进行分组。

使用?:来跳过捕获

比如:
if (/(?:baronto)?saurus (steak|burger)/)
使用不捕获括号来跳过baronto。

注意最后一句的理解:$1 = "i",$2 = " love ",$3 = "perl",然后i 由 <$3>替换,(.*)由$2替换,love由<$1>替换。

替换操作 s/<pattern>/<replacement>/ 还可以在末尾加上 e 或 g 参数,他们的含义分别为:

s/<pattern>/<replacement>/g 表示把待处理字符串中所有符合 <pattern> 的模式全部替换为 <replacement> 字符串,而不是只替换第一个出现的模式。
s/<pattern>/<replacement>/e 表示将把 <replacemnet> 部分当作一个运算符,这个参数用的不多。

比如下面的例子:

$string = "i:love:perl";
$string =~ s/:/*/; #此时 $string="i*love:perl";
$string = "i:love:perl";
$string =~ s/:/*/g; #此时 $string="i*love*perl";
$string =~ tr/*/ /; #此时 $string="i love perl";
$string = "www22cgi44";
$string =~ s/(\d+)/$1*2/e; # (/d+)代表 $string 中的一个或多个数字字符,将这些数字字符执行 *2 的操作,因此最后 $string 变成了 "www44cgi88"。

3.命名捕获

虽然可以用括号的捕获能力并在$1、$2这样的变量中存储捕获的串,但是管理这样的数字变量也是比较困难。

比如:
my $names = 'Fred or Barney';
if ($names =~ /(\w+) (and|or) (\w+)/){
  print "I saw $1 and $2";
}
输出:I saw Fred and or
现在看到了第二个输出,但它却不是我们期望的输出,因为第二个括号的引入导致了问题,引入普通的括号导致“择一”模式匹配进入了$2,而我们所期望的串进入了$3.

现在不必记住这些$1数字的含义了,现在捕获的结果会进入哈希(%+),其中的键就是在捕获时候使用的特殊标签,其中捕获的值则是被捕获的串。

为捕获串加标签的方法是使用(?<LABEL>PATTERN)这样的写法,而LABEL可以自行命名。

my $what = 'fred|barney';
open (MYFILE,"Exercise9_1.txt") || die "Cannot open the file.";
print "The file has open.\n";
my @array = <MYFILE>;
foreach my $line (@array){
	if ($line =~ /((?<word_1>$what)(?<word_2>$what)(?<word_3>$what))/){
		print "The matching string is:$+{word_1}$+{word_2}$+{word_3}\n";
	}else {
		print "The line is : $line \n";
	}
}
close MYFILE;


输出:
The matching string is:fredfredfred
The matching string is:fredbarneyfred
The matching string is:fredbarneybarney
The matching string is:barneybarneybarney
The matching string is:barneybarneybarney
The matching string is:fredbarneyfred
The matching string is:barneybarneybarney
分享到:
评论

相关推荐

    mastering-perl-scripts.zip

    6. **错误处理和调试**:了解如何处理程序中的错误,使用条件语句进行异常捕获,以及使用perl -d命令进行脚本调试,是编写健壮Perl脚本的关键。 7. **面向对象编程**:虽然Perl是一门过程导向的语言,但同样支持...

    Perl--Regular expression.pdf

    当正则表达式中出现了括号 `()`,则可以实现对匹配到的部分进行捕获,并且可以使用特殊变量 `$1`, `$2`, ... 来引用这些捕获的组。 - **示例**: ```perl my $str = "I love Perl"; $str =~ s/(love)/&lt;$1&gt;/; ...

    magic-perl-for-beginner-.rar_magic

    2. **Perl语法**:包括变量、数据类型、控制结构(如if语句、循环)、函数和运算符等基础概念。 3. **字符串和数组操作**:Perl对字符串和数组的强大支持,如何进行查找、替换、分割和连接等操作。 4. **文件和目录...

    perl-NIDS.rar_NIDS_ids

    1. **Perl编程基础**:了解Perl的基本语法、变量、控制结构、函数等,以便理解代码逻辑。 2. **网络协议分析**:理解TCP/IP协议栈,包括IP、TCP/UDP、ICMP等协议,以及它们在网络通信中的作用。 3. **数据包捕获与...

    perl-pocket-ref-5.004.1.pdf

    该文档详细介绍了Perl编程语言的基础语法、变量、运算符、函数等内容,并提供了针对不同应用场景的实用模块介绍。下面将基于文档目录中的各个章节来总结和解释Perl语言的关键知识点。 ### 1. Command Line Options ...

    perl文件用法

    - Perl中的变量以`$`符号开头,如`$variable`。根据数据类型,还可以有数组`@array`和哈希 `%hash`。 - 变量不需要预先声明,但使用`strict`模式时需要先声明。 3. **字符串和数值操作** - Perl支持字符串和数值...

    perl-examples_beginners_Perl_

    8. **错误处理和调试**:Perl使用`die`和`warn`来抛出错误和警告,`__DIE__`和`__WARN__`可用来捕获和处理它们。学习过程中,通过调试脚本(如`ex01.pl`)理解错误处理机制是重要的步骤。 9. **对象和面向对象编程*...

    perl-scripts

    Perl还有强大的错误处理机制,通过使用eval块和检查$@变量来捕获和处理异常。此外,它有丰富的标准库和第三方模块,如CPAN( Comprehensive Perl Archive Network),提供成千上万的扩展功能,涵盖几乎所有的编程...

    perl - 基础

    7. **错误处理**:Perl使用`eval`来捕获运行时错误,并通过`die`和`warn`函数输出错误信息。 8. **对象导向编程**:Perl支持面向对象编程,通过`package`定义类,`new`创建对象,以及`sub`定义方法。 9. **上下文*...

    perl DBD-Oracle-1.22

    安装过程通常涉及编译和链接Oracle的头文件和库,这可能需要设置正确的环境变量和配置选项。 4. **连接Oracle**:通过DBD-Oracle,你可以创建数据库句柄(DBH)来建立与Oracle的连接。这通常需要提供数据库的TNS...

    PERL内置变量$.等

    ### PERL内置变量详解 #### 引言 Perl是一种广泛使用的高级编程语言,以其灵活性和强大的文本处理功能而著称。在Perl编程中,内置变量是开发者常用的特性之一,它们可以帮助程序员更简洁、高效地编写代码。本文将...

    perl简明教程

    Perl的错误处理机制也很灵活,可以使用eval块捕获异常,或者使用die抛出错误信息。调试Perl程序可以通过使用`use Data::Dumper;`模块来查看变量内容,或者使用`-d`选项启动perl解释器进行调试。 总之,“Perl简明...

    Perl学习总结 - 副本.docx

    - `()`:分组,可用于捕获匹配结果。 - `|`:表示“或”,即匹配左边或右边的模式。 - `[abc]`:字符集,匹配其中任一字符。 - `\d`、`\w`、`\s`:分别匹配数字、单词字符、空白字符。 以上内容涵盖了执行Perl...

    Perl内置及特殊变量

    ### Perl内置及特殊变量详解 #### 一、概述 Perl是一种功能强大且灵活的脚本语言,广泛应用于系统管理、Web开发、网络编程等领域。它提供了丰富的内置变量和特殊变量,这些变量无需事先声明,可以直接在程序中使用...

    使用perl进行查找和替换.pdf

    - **正则表达式的高级特性**:Perl支持多种正则表达式的高级特性,如捕获组、非捕获组、正向预测等,这些特性可以用于更精细的查找与替换需求。 #### 六、注意事项 - 在使用`-i`选项进行文件编辑时,一定要小心...

    PERL语言编程

    - 单数变量即标量变量,是Perl中最基本的数据存储单位。例如:`$a = 10;` - **1.2.3 复数变量** - 数组变量和哈希变量统称为复数变量。 - 数组变量示例:`@numbers = (1, 2, 3);` - 哈希变量示例:`%colors = ...

    perl-basic.zip_软件设计/软件工程_Perl_

    1. 变量:Perl支持多种类型的变量,如标量(scalar)、数组(array)和哈希(hash)。标量用于存储单个值,数组是一组按顺序排列的元素集合,而哈希则是一组键值对。 2. 控制结构:Perl支持if...else、while、for、...

    PERL帮助文档-网页版-基础教程

    Perl提供了eval和die等机制来捕获和处理异常。文档将阐述如何有效地进行错误处理。 9. **面向对象编程** 尽管Perl是过程导向的,但它也支持面向对象编程。文档将解释如何定义类、创建对象、继承和封装。 10. **...

    神奇的perl两本perl入门教材合集

    3. **Perl语法基础**:包括变量、常量、数据类型(如标量、数组、哈希)的使用,以及字符串操作和正则表达式。 4. **流程控制**:讲解条件语句(if-else)、循环(while、for)以及分支结构(switch-case)等控制...

Global site tag (gtag.js) - Google Analytics