6

Ho un grosso problema a scrivere un'espressione regolare che ridurrà tutti gli spazi bianchi nel mio input.Espressioni regolari - Spazio vuoto corrispondente

Ho provato \s+ e [ \t\t\r]+, ma che non funzionano.

Ho bisogno di questo perché sto scrivendo uno scanner con flex e sono bloccato nello spazio bianco corrispondente. Gli spazi devono solo essere abbinati e non rimossi.

ingresso Esempio:

program 
3.3 5 7 
{ comment } 
string 
panic: cant happen 

risposta

7
  1. flex impieghi (circa) POSIX "Extended Regular Expression" Sintassi - \s non funziona, perché è un'estensione Perl.

  2. È un errore di battitura [ \t\t\r]+? Penso che vorrai un \n lì dentro.

Qualcosa di simile [ \n\t\r]+ certamente dovrebbe lavoro. Ad esempio, questo lexer (che ho salvato come lexer.l):

%{ 

#include <stdio.h> 

%} 

%option noyywrap 

%% 

[ \n\t\r]+ { printf("Whitespace: '%s'\n", yytext); } 
[^ \n\t\r]+ { printf("Non-whitespace: '%s'\n", yytext); } 

%% 

int main(void) 
{ 
    yylex(); 
    return 0; 
} 

... corrisponde con successo gli spazi nel vostro ingresso esempio (che ho salvato come input.txt):

$ flex lexer.l 
$ gcc -o test lex.yy.c 
$ ./test < input.txt 
Non-whitespace: 'program' 
Whitespace: ' 
' 
Non-whitespace: '3.3' 
Whitespace: ' ' 
Non-whitespace: '5' 
Whitespace: ' ' 
Non-whitespace: '7' 
Whitespace: ' 
' 
Non-whitespace: '{' 
Whitespace: ' ' 
Non-whitespace: 'comment' 
Whitespace: ' ' 
Non-whitespace: '}' 
Whitespace: ' 
' 
Non-whitespace: 'string' 
Whitespace: ' 
' 
Non-whitespace: 'panic:' 
Whitespace: ' ' 
Non-whitespace: 'cant' 
Whitespace: ' ' 
Non-whitespace: 'happen' 
Whitespace: ' 
' 
+0

Sì Intendevo \ n invece di t: s in [\ t \ t \ r] + Grazie per la tua risposta, è corretto :) – mrjasmin

+0

Usa '[\ n \ t \ r \ f] +' per abbinare la fine di tutte le righe. Omettendo '\ f' non corrisponderà alle terminazioni dei file Windows/DOS. Fonte: http://web.eecs.utk.edu/~bvz/cs461/notes/flex/ – ribamar

-1

io non sono uno specialista in flessione, ma hanno si dovrebbe usare/g e/m bandiere nella vostra espressione regolare, per lavorare con Srings multilinea.