2012-04-04 49 views
1

獨立的變量的名字,我有這些字符串:Perl的 - 從類型

int name 
const int level 
const char   * const     format 
(float) int promenna 
(char *) int jina 

我怎麼能在Perl separete的變量(名稱,層次,形式,...),從靜止這個名字?我嘗試了一些正常的表達方式,如/((\.*\s*\w+)+)(\s+)(\w+)$/,但我並不擅長這一點,而且我的問題與我的問題有關。那麼有沒有人有簡單的解決方案在第三個例子中有很多空格,你必須指出,可能有\ s *。謝謝

編輯:我不好解釋我想要什麼。我說我想單獨名稱,我的意思是我需要從字符串中刪除最後一個字(變量名)。我很抱歉誤會。

+0

爲了做到這一點,你需要有一個關鍵詞列表,基本上將其他所有內容視爲變量名稱。那是對的嗎? – 2012-04-04 12:04:36

+0

不,我不能列出關鍵詞,因爲它必須與用戶結構和類型一起工作。小學我只需要從字符串中刪除最後一個單詞,但我需要保留其他單詞之間的空格字符數。 – 2012-04-04 12:08:16

+0

明確了這個問題。謝謝! – 2012-04-04 12:11:53

回答

4

剛剛替補白白過去的 '字',用

s/\w+$// 

如:

#!perl 

my @strings = (
    'int name', 
    'const int level', 
    'const char   * const     format', 
    '(float) int promenna', 
    '(char *) int jina', 
    'char *a' 
); 

for my $string (@strings) { 
    $string =~ s/\w+$//; 
    $string =~ s/\s*$//; 
    $string =~ s/\s+/ /g; 
    print "$string\n"; 
} 

結果

int 
const int 
const char * const 
(float) int 
(char *) int 
char * 
+0

這正是我所尋找的,但我更多的東西。如果我有char * a而我需要char *呢?現在我得到char * a。謝謝 – 2012-04-04 12:48:21

+0

已更新,以處理這種情況。它現在會留下行尾的空格,但如果需要,可以通過chomp或其他正則表達式來處理。 – ptomli 2012-04-04 12:58:24

+0

這正是我需要的(只需添加一個正則表達式來刪除尾隨空格)。謝謝 – 2012-04-04 13:03:34