Regex 正则表达式模式匹配与提取

Regex 正则表达式模式匹配与提取,regex,perl,Regex,Perl,我正在尝试编写一个perl正则表达式来提取冒号后面大于2个字母的单词:。例如,如果模式是subject:我将要编写一个正则表达式。我只需要在$variable>2个字母的单词si.e中提取,$variable=“subject:about write regex” 这是我的程序,其中正则表达式和模式匹配已完成,但当我打印时,我的变量为空。我做错了什么 #!/usr/bin/perl while (<STDIN>) { foreach my $query_part (s

我正在尝试编写一个perl正则表达式来提取冒号后面大于2个字母的单词:。例如,如果模式是subject:我将要编写一个正则表达式。我只需要在$variable>2个字母的单词si.e中提取,$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);
#/usr/bin/perl
而(){
对于每个我的$query\u部分(拆分(/\s+/,$)){
我的($query\u part\u subject)=$query\u part=~/([^\w\\.]+)(((?:\w{3,}\124;[\$\@()+)+)(?:(\ w{3,}.+))?/;
打印“查询部分:$query\u part\u subject\n”;
}
}
出口(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";
}
尝试这样做:

#!/usr/bin/perl

use strict; use warnings;

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

__DATA__
subject:a bb ccc dddd fffff
注意

  • 根据我对您问题的理解:我只在
    字符后显示单词长度>2个字符

请提供更好的示例:输入和预期输出因此,如果输入是
主题:我即将编写正则表达式
您想要输出
主题:关于编写正则表达式
。你想去掉“我是”、“我是”和“a”?如果不是,我怀疑是这样的,你的问题描述得很糟糕,你的例子更糟。这不是和你昨天问的问题很相似吗?是的,我想要所有大于2个字母的单词。@sputnick它怎么比grep{length($)>2}split更好?
ccc
dddd
fffff