我遇到了一個很大的問題,要編寫一個正則表達式來修剪輸入中的所有空白。正則表達式 - 匹配空格
我試過\s+
和[ \t\t\r]+
但是不起作用。
我需要這個,因爲我正在用flex寫一個掃描器,而且我被困在匹配的空白處。 空白只能匹配而不能刪除。
例輸入:
program
3.3 5 7
{ comment }
string
panic: cant happen
我遇到了一個很大的問題,要編寫一個正則表達式來修剪輸入中的所有空白。正則表達式 - 匹配空格
我試過\s+
和[ \t\t\r]+
但是不起作用。
我需要這個,因爲我正在用flex寫一個掃描器,而且我被困在匹配的空白處。 空白只能匹配而不能刪除。
例輸入:
program
3.3 5 7
{ comment }
string
panic: cant happen
flex
用途(近似)POSIX 「擴展正則表達式」 語法 - \s
不起作用,因爲它是一個Perl擴展。
是[ \t\t\r]+
是錯字?我想你會想要一個\n
在那裏。
喜歡的東西肯定[ \n\t\r]+
應該工作。例如,這個詞法分析器(我已經保存爲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: '
'
我不是在彎曲的專家,但你應該在你的正則表達式中使用/ G和/ M標誌,具有多srings工作。
是我的意思是\ n,而不是在[\ t \ t \ r]中輸入t:+感謝您的回答,它的正確性:) – mrjasmin
使用'[\ n \ t \ r \ f] +'匹配所有行結尾。省略'\ f'將不匹配Windows/DOS文件結尾。 來源:http://web.eecs.utk.edu/~bvz/cs461/notes/flex/ – ribamar