2010-08-04 22 views
1

單詞以-D開頭(它也可能是-d)。 後跟零個或多個空格。 之後是$。 然後系列是{rajna_NAME}。 簡言之我必須使用正則表達式在Perl中提取單詞

-d ${ranjana_wdgf_NAME}or -D${Tom_task_NAME} 

我想提取

ranjana_wdgf 
Tom_task 

我的疑問是

if ($word =~ m/^-D(\$)\|(\w*NAME)\b/) 

有什麼不對?

回答

1

有時正則表達式不如其他方式那樣健壯。

對於這種情況下,我不介意給Text::Balanced一個嘗試。

2

如果你真的需要一個正則表達式來解決這個問題, 那麼試試這個

$word =~ m/\{(.*?)\_NAME/; # assuming that name is surrounded by curly brackets 

更新時間:

$word =~ m/-[dD]\s*\$\{(.*?)_NAME/; #assuming -d or -D always be there. 
+0

是否有任何機會,包括-D或正則表達式作爲過濾判定基準與它allong -d應該開始with..Because其過濾和其他有害數據..因爲文本文件很大,我無法提供整個內容 – Sreeja 2010-08-04 09:49:56

+0

@Sreeja:更新,看看。 – 2010-08-04 10:09:03

+0

謝謝..它工作正常與此.. – Sreeja 2010-08-04 10:42:05

1

我不知道我的理解問題正常。 但看起來像下面的代碼解決您的問題:

 
$ cat extract.pl 
#!/usr/bin/perl 

use strict; 
use warnings; 

sub extract_name($) 
{ 
    my $s = shift; 
    if($s =~ /^-[dD]\s*\${(.*)_NAME}$/) 
    { 
     print "$1\n"; 
    } 
    return; 
} 

extract_name('-d ${ranjana_wdgf_NAME}'); 
extract_name('-D${Tom_task_NAME}'); 
$ perl extract.pl 
ranjana_wdgf 
Tom_task 
$ 
+0

@ dmitryAwesome ..有更多的疑問,以澄清與你 – Sreeja 2010-08-04 10:16:45

+0

爲什麼我們使用轉變? – Sreeja 2010-08-04 10:45:46

+0

你是否在談論這個例子中的「轉變」? 它用於訪問傳遞給子例程的參數。 或者,您可以直接通過$ _ [0],$ _ [1]等訪問參數 – 2010-08-05 06:58:11