-2

我正在尝试编写一个 perl 正则表达式来提取冒号 : 后大于 2 个字母的单词。例如,如果模式是主题:我要写一个正则表达式。我只需要在我的 $variable 中提取 >2 个字母的单词,即 $variable = "subject:about write regex"。

这是我的程序,其中完成了正则表达式和模式匹配,但是当我打印时,我的变量为空。我究竟做错了什么?

#!/usr/bin/perl
while (<STDIN>) {
        foreach my $query_part (split(/\s+/, $_)) {
        my($query_part_subject) = $query_part =~ /([^\w\@\.]+)?((?:\w{3,}|[\$\@()+.])+)(?::(\w{3,}.+))?/ ;
                print "query_part : $query_part_subject \n";


        }

   }

   exit(0);
4

2 回答 2

1

尝试这样做:

#!/usr/bin/perl

use strict; use warnings;

while (<DATA>) {
    s/.*?://;
    print join "\n", grep { length($_) > 2 } split;

__DATA__
subject:a bb ccc dddd fffff

输出

ccc
dddd
fffff

笔记

  • 根据我对您的问题的理解:我仅在字符后显示长度 > 2 个字符的单词:
于 2012-11-13T21:32:00.780 回答
0

从你的问题看不清楚。这是你想要的??

$txt='I am about to create regex';

$x='(I)';   
$y='.*?';   
$z='(am)';  

$re1=$x.$y.$z;
if ($txt =~ m/$re1/is)
{
    $var1=$1;
    $word1=$2;
    print "($var1) ($word1) \n";
}
于 2012-11-13T21:15:02.197 回答