2011-05-25 79 views
0

我正在搜索單詞「移動」,並且我想匹配「移動」以及打印時。正則表達式匹配後綴到英文單詞

我要對這個辦法是:

if ($sentence =~ /($search_key)d$/i) { 
    $search_key = $search_keyd; 
} 
$subsentences[$i] =~ s/$search_key/ **$search_key** /i;       
$subsentences[$i] =~ s/\b$parsewords[1]_\w+/ --$parsewords[1]--/i;       
print "MATCH #$count\n",split(/_\S+/,$subsentences[$i]), "\n"; 
$count++; 

這是一個較長的代碼的一部分,所以如果有不清楚的地方,讓我知道。 _是因爲句子中的單詞被標記(例如,I_NN move_VB到_PEP ....)。

其中$search_keyd$search_key."d",它的工作!

一個很好的補充是檢查單詞是否以e結尾,因此只需要添加一個d。我猜想它看起來像這樣:e?$/d$

即使一般的答案就足夠了。

我是新來的Perl。所以很抱歉,如果這是基本的。提前致謝!!!

+0

標題不完全符合您的要求。爲清晰起見,您可能想要重新修改它。 – Greg 2011-05-25 14:10:40

+0

你也想配合「移動」嗎? – tadmc 2011-05-25 21:19:01

回答

2

如果我理解正確,您想要搜索"move"並添加高亮顯示,但也包括基本單詞的任何變體,例如"moves" "moved"

當你在這樣的文本替換的話,通常要更換所有的話,那麼你需要的/g操作上的正則表達式,像這樣:

$subsentences[$i] =~ s/$search_key/ **$search_key** /ig 

而且,你應該確保不匹配單詞的部分。例如。你想匹配"move",但不是"remove"。對於這一點,你可以用\b標記字boundry:

$subsentences[$i] =~ s/\b$search_key/ **$search_key** /ig 

爲了符合特定的後綴,則需要使用有效的字符或字符組合字符類。 move[sd]將會找到"moves""moved"。但是,對於像"jump"這樣的詞,您需要更具體一些:"jump(s|ed)"。請注意,[sd]可以替換爲(s|d)。所以,除非你的任何文字拼寫錯誤,你可以逃脫:

$subsentences[$i] =~ s/\b$search_key(s|d|ed)/ **$search_key$1** /ig 

注意$1比賽無論是第一個匹配的括號內發現。

要找到匹配詞的數量:

my $matches = $subsentences[$i] =~ s/\b$search_key(s|d|ed)/ **$search_key$1** /ig 

如果您想更具體的與後綴,即使其不匹配像"moveed"拼寫錯誤的話,你需要做一些特殊的匹配。例如:

if ($search_key =~ /e$/i) { $suffix = '(s|d)' } 
else { $suffix = '(s|ed)' } 
my $matches = $subsentences[$i] =~ s/\b$search_key$suffix/ **$search_key$1** /ig 

它可能會變得非常複雜,您可以添加更多的搜索詞。

有關正則表達式的一些幫助here

+0

非常感謝您的一步一步! ($ search_key [$ i] =〜/ e $/i)我剛更改了 ($ subsentences [$ i] =〜/ e $/i){$ suffix ='(s | d)'} 至 ){$ suffix ='(s | d)'} 然後分開s和d個案例,因爲它們對應不同的案例。非常感謝! – Jon 2011-05-25 17:12:31

+0

啊,當然是。你想檢查搜索模式,而不是文本。 =)我的壞。我會解決這個問題。 – TLP 2011-05-25 20:12:56

0

如果你想要匹配所有以你的搜索詞開始的完整單詞,即'move'匹配'move','moved','movers'等,那麼你想用一個字符類來檢測這個詞的結尾。

因此,而不是:

if ($sentence =~ /($search_key)d$/i) 

嘗試使用:

if ($sentence =~ /($search_key\w*)\W$/i) 

的\ W *將匹配任何數量的標準的文字字符,\ W應該阻止您包括其他字符,如空格或標點符號。

+0

雅我有,除了印刷聲明,它也必須打印這個詞,這並沒有真正的工作...我也不想要搬家或移動等...它仍然需要作爲一個移動動詞,所以移動和移動現在是好的...移動[se * d]也許? – Jon 2011-05-25 14:13:09

+0

@Jon:你不能以這種方式在角色類中使用*,但即使你可以匹配移動和移動,但它也會匹配我認爲你想要的moveee。 – Greg 2011-05-25 14:30:01

+0

@Jon:爲什麼這樣一個具體的匹配方案?你想用這個做什麼? – Greg 2011-05-25 14:30:55

相關問題