2012-04-04 7 views
1

Ich habe diese Saiten:Perl - getrennte Variablennamen von Typ

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

Wie kann ich in Perl, die die Trennung des Namen von Variablen (Namen, Ebene, Format, ...) aus der Ruhe? Ich habe versucht, einige regulären Ausdruck als /((\.*\s*\w+)+)(\s+)(\w+)$/, aber ich bin nicht sehr gut darin und ich habe ein Problem mit meinem. Hat also jemand eine einfache Lösung? Und im dritten Beispiel gibt es viele Leerzeichen und Sie müssen damit rechnen, da könnte \ s * sein. Danke

Edit: Ich schlecht erklären, was ich will. Ich sagte, dass ich getrennten Namen will und ich bedeute, dass ich letztes Wort (Variablenname) von der Schnur entfernen muss. Ich bedaure Missverständnisse.

+0

Um dies zu tun, Sie haben müssen Liste der Schlüsselwörter und grundsätzlich alles andere als Variablennamen behandeln. Ist das korrekt? –

+0

Nein, ich kann keine Liste von Schlüsselwörtern haben, weil es mit den Strukturen und Typen der Benutzer arbeiten muss. Grundlegend Ich muss nur das letzte Wort aus der Zeichenfolge entfernen, aber ich muss die Anzahl der Leerzeichen zwischen anderen Wörtern beibehalten. –

+0

Das klärt das Problem. Vielen Dank! –

Antwort

4

Ersetzen Sie einfach die letzte 'Wort' für nichts, mit

s/\w+$// 

zB:

#!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"; 
} 

Ergebnisse in

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

Es war genau das, was ich suchte, aber ich mehr Sache. Was ist wenn ich Char * a hätte und Char * brauche? Jetzt bekomme ich char * a. Danke –

+0

Aktualisiert, um diesen Fall zu behandeln. Es hinterlässt jetzt nachstehende Leerzeichen auf der Zeile, aber das kann bei Bedarf durch chomp oder eine andere Regex gehandhabt werden. – ptomli

+0

Es ist genau das, was ich brauche (fügen Sie einfach einen weiteren Regex hinzu, um nachfolgende Leerzeichen zu entfernen). Danke –