2012-10-02 28 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 
相關問題