私の入力の空白をすべて削除する正規表現を書くのに大きな問題があります。正規表現 - 空白のマッチング
私は\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]+
はtypoですか?あなたはそこに\n
が欲しいと思います。
確か[ \n\t\r]+
のようなものは動作するはずです。例えば、(私はlexer.l
として保存しました)このレクサー:はい
$ 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: '
'
私はフレックスの専門家でないんだけど、あなたは複数行sringsで動作するように、あなたの正規表現で/グラム/ mでフラグを使用する必要があります持っています。 (約)
:
は...成功した(私は
input.txt
として保存した)あなたの例の入力で空白にマッチします – mrjasmin'[\ n \ t \ r \ f] +'を使ってすべての行末をマッチングさせます。 '\ f'を省略すると、Windows/DOSファイルの終わりと一致しません。 ソース:http://web.eecs.utk.edu/~bvz/cs461/notes/flex/ – ribamar