2012-10-02 70 views
0

我有句如在下面的示例:如何搜索perl中关键字之前或之后的字母数字单词?

$sen1 = "The quick brown fox jump KEYWORD over123 the3 lazy dog, fox is quick"; 

$sen2 = "The quick brown fox jump123 KEYWORD over the lazy dog, fox is quick"; 

我想使用关键字“KEYWORD”作为我的搜索字符串之前和使用Perl的正则表达式搜索字符串后提取字母词。

输出样本:

over123

jump123

注:这个词 'the3' 被排除在外,因为我只是恰好之前或之后的“寻找字母词关键词'。

感谢

回答

0

假设你没有对任何目标的任何更严格的要求,但它可以由任何文字或数字的至少一个,东西像

([\w\d]+)\s+KEYWORD\s+([\w\d]+) 

应该做的你在这两种情况下;这会给你之前的单词$ 1,而后面的单词$ 2。

+0

非常感谢,有什么约1或2之前或关键字之后的话呢? – aliocee

1

您可以使用命名捕获方法,这样如果只有一种情况存在,您不需要检查$ 1或$ 2。 (?<before>[\w\d]+)?\s*KEYWORD\s*(?<after>[\w\d]+)?

my $str = <<DAT; 
The quick brown fox jump KEYWORD over123 the3 lazy dog, fox is quick 
The quick brown fox jump123 KEYWORD over the lazy dog, fox is quick 
The quick brown fox jump123 KEYWORD over123 the lazy dog, fox is quick 
The quick brown fox jump123KEYWORDover123 the lazy dog, fox is quick 
DAT 

foreach (split(/\n/,$str)){ 
    if(/(?<before>[\w]+)?\s*KEYWORD\s*(?<after>[\w]+)?/){ 
     print $+{before} . "-" . $+{after} . "\n"; 
    } 
} 
+0

非常感谢,关键字前后有1或2个字怎么办? – aliocee

+0

所以你需要得到关键字前后的所有字母数字字? – Jithin

+0

同样在你的问题中,你说'the3'被遗漏了,因为你只搜索前后的单词。所以现在如果你想要更多的话,请用一些例子来解释。 – Jithin

1

既然你有你的关键字,只有在你的字符串出现一次,你可以这样做:

my $string = 'The quick brown fox jumps123 KEYWORD over the lazy dog'; 

my ($w_before, $w_after) = $string =~ m/(\w+)\s*KEYWORD\s*(\w+)/; 
# $w_before == jumps123 
# $w_after == over 

我假设,当你说字母,你的意思是它要么字母或数字或两者的组合。在这种情况下,\w可以做到这一点。我还会把\s*只是为了防止KEYWORD和前后字之间有空格。

使用我写的东西,它可以捕获单词“嗒嗒”和“富”:

blahKEYWORDfoo 
blah KEYWORD foo 
blahKEYWORD foo 
blah KEYWORDfoo 
blah   KEYWORD  foo 
相关问题