6

Eşleştirme benim girişteki tüm boşluk kırpmak regexpi yazmak için büyük bir sorun yaşıyorum.Düzenli ifadeler - boşluk

\s+ ve [ \t\t\r]+'u denedim, ancak çalışmaz.

Ben esnek kullanarak bir tarayıcı yazıyorum çünkü bu ihtiyacım var ve boşluk eşleşen şaşırıp. Beyaz boşluk sadece eşleştirilmeli ve kaldırılmamalıdır.

Örnek girişi:

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

cevap

7
  1. flex kullandığı (yaklaşık) POSIX sözdizimi "Normal İfade Extended".

  2. [ \t\t\r]+ bir yazım hatası mı? Orada bir \n istiyorum. [ \n\t\r]+ kesinlikle gerektiği iş gibi

şey. Örneğin, (I lexer.l olarak kaydettiğiniz) Bu lexer: Evet

$ 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

:

%{ #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; } 

... başarıyla (I input.txt olarak kaydettiğiniz) senin örneğin girişteki boşluk maçları Ben n yerine t kadar \ geliyordu: s Cevabınız için [\ t \ t \ r] + teşekkürler, onun doğru :) – mrjasmin

+0

Kullanım '[\ n \ t \ r \ f] +' biten tüm çizgi eşleşen. \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\}. Kaynak: http://web.eecs.utk.edu/~bvz/cs461/notes/flex/ – ribamar

-1

Ben esnek bir uzman değilim, ama sen satırlı srings çalışmak için, normal ifadede/g ve/m bayraklarını kullanmalıdır var. o bir Perl, çünkü \s çalışmıyor -