6

मुझे एक regexp लिखने में बड़ी समस्या है जो मेरे इनपुट में सभी व्हाइटस्पेस को ट्रिम कर देगा।नियमित अभिव्यक्तियां - मिलान व्हाइटस्पेस

मैंने \s+ और [ \t\t\r]+ को आजमाया है लेकिन यह काम नहीं करता है।

मुझे इसकी आवश्यकता है क्योंकि मैं फ्लेक्स का उपयोग करके स्कैनर लिख रहा हूं, और मैं व्हाइटस्पेस से मेल खाता हूं। व्हाइटस्पेस को अभी मिलान किया जाना चाहिए और हटाया नहीं जाना चाहिए।

उदाहरण इनपुट:

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

उत्तर

7
  1. flex का उपयोग करता है (लगभग) POSIX "विस्तारित नियमित अभिव्यक्ति" वाक्य रचना।

  2. [ \t\t\r]+ एक टाइपो है? मुझे लगता है कि आप वहां \n चाहते हैं।

तरह [ \n\t\r]+ निश्चित रूप से चाहिए काम कुछ। उदाहरण के लिए, इस lexer (जो मैं 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; 
} 

... सफलतापूर्वक अपना उदाहरण इनपुट में खाली स्थान के लिए (जो मैं 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

हाँ मेरा मतलब था \ n के बजाय \ \ t \ t \ r] + आपके उत्तर के लिए धन्यवाद, यह सही है :) – mrjasmin

+0

सभी पंक्तियों को समाप्त करने के लिए '[\ n \ t \ r \ f] +' का उपयोग करें। ओमटिंग '\ f' विंडोज/डॉस फ़ाइल के अंत से मेल नहीं खाएगा। स्रोत: http://web.eecs.utk.edu/~bvz/cs461/notes/flex/ – ribamar

-1

मैं फ्लेक्स में एक विशेषज्ञ नहीं हूँ, लेकिन आप अपने नियमित अभिव्यक्ति में/g और/मी झंडे का उपयोग करना चाहिए, बहु srings साथ काम करना है। , \s काम नहीं करता है, क्योंकि यह एक पर्ल विस्तार है -

संबंधित मुद्दे