曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4308|回复: 0
打印 上一主题 下一主题

自动匹配变量($'  $&   $`)

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2011-9-29 17:14:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
$'  $&   $` 这 3 个符号对应 3 个自动变量,所谓自动变量就是根据匹配情况而自动设置的变量。

$&  变量存储所有匹配的部分。

$'    变量存储了匹配字符串身后没有匹配的部分。

$`   变量存储了匹配字符串身前没有匹配的部分。


测试代码:
[Perl] 纯文本查看 复制代码
#!/usr/bin/perl

if ("Welcome to Groad.net it is good" =~ /(\w+)\.(\w+)/) {
        print "$1 $2\n";
        print "That actually matched '$&' \n";
        print "Before match '$`' \n";
        print "After match '$'' \n";
}

运行输出:
# ./character.pl
Groad net
That actually matched 'Groad.net'
Before match 'Welcome to '
After match ' it is good'
注意,在匹配模式里,'.' 符号要用反斜线转义,不然会被解析为点号的元字符含义,如果这样 /(\w+)\.(\w+)/ 就会匹配到 "Welcome to" ,因为正则表达式的“贪功"特性使它一旦发现匹配它就会马上返回邀功领赏。



一个实用的模式测试程序:
[Perl] 纯文本查看 复制代码
#!/usr/bin/perl

while (<>) {
        chomp;
        if (/groad/) {
                print "Matched: |<[    ubbcodeplace_1    ]>|\n";
        } else {
                print "No match: |$_|\n";
        }
}

运行输出:
# ./mode.pl
www.net
No match: |www.net|
www.groad.net
Matched: |www.<groad>.net|
在上面的测试程序中,<> 不断的读入输入,然后进行匹配比较,这样可以检测某些字符串是否匹配指定的模式。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-3 11:32 , Processed in 0.083603 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表