正则表达式模式匹配和提取

时间:2012-11-13 21:05:02

标签: regex perl

我正在尝试编写一个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);

2 个答案:

答案 0 :(得分: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

注意

  • 从我对你的问题的理解:我只显示单词长度&gt; :字符后面的2个字符。

答案 1 :(得分: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";
}