perl和regex来提取路径

时间:2011-06-25 05:16:44

标签: regex perl

我有一块文本/代码,我需要搜索include =然后在'='之后抓住整个路径我已经尝试了几种方法而且我似乎无法得到我正在寻找的东西在代码/文本块中:

include=Y:\default\main\tsconfig\custom\inline\callouts\search\results.

假设这是被搜索的xml:

<item name="Post Include Code">
<value>
First section of content

include=Y:\default\main\tsconfig\tsconfig\custom\inline\callouts\search\results.tpl
Second section of content
</value>

</item>

代码:

if ($includeText=~ s/include=(.*)$/\1/) { 
    print "$1";
}
else { 
    print "no path";
}

我希望最终得到Y:\default\main\tsconfig\custom\inline\callouts\search\results.tpl,以便我可以添加模板。文本/代码是从另一个文件中提取的。

谢谢!

5 个答案:

答案 0 :(得分:2)

我对您的脚本及其工作做了一些小改动:

$include = "include=Y:\\default\\main\\tsconfig\\custom\\inline\\callouts\\search\\results.";


if ($include =~ m/include=(.*)$/) { 
    print "$1";
}
else { 
    print "no path";
}

答案 1 :(得分:1)

对不起伙伴,我拿了你的剧本,用过它,它运作得很好。你的正则表达式没有任何问题,而是你的其他代码,你没有显示。

另外:有关您的问题的更多信息会很棒。 “我似乎无法得到......”并没有真正告诉我们什么是错误的。

我的是你没有使用的:

use strict;
use warnings;

因此你做了一些愚蠢的事情,例如:

while ($includetext = <DATA>) {
    if ($includeText =~ s/...)

此脚本有效:

use warnings;
use strict;

while (<DATA>) {
    if (s/include=(.*)$/$1/) { 
            print "$1";
    }
    else { 
            print "no path";
    }
}

__DATA__
include=Y:\default\main\tsconfig\custom\inline\callouts\search\results.

答案 2 :(得分:0)

我认为这就是你要找的东西

#!/usr/bin/perl
use strict;
use diagnostics;
my $inc='include=Y:\default\main\tsconfig\custom\inline\callouts\search\results.tpl';
if ($inc =~ m{include=([\w\:\\\w /]+\w+\.\w+)} )
{
print $1;
}
else
{
print "no path";
}

答案 3 :(得分:-3)

您不希望包含“include =”部分。你想要的是什么,所以你必须用这样的东西排除“include =”部分:[^include=].*(文本编辑器中的快速文本为我工作)。

答案 4 :(得分:-4)

//编辑: 看了几个例子后纠正了 这似乎有效,这与Raghuram的帖子相同。

if($includeText =~ m/include=(.*)$/){
                    print "$1";
                    }
                    else { 
                        print "no path";
                    }