2009-04-29 35 views
0

是新來的LEX,我想採取一切具體到一個正則表達式如何選擇法內比賽

例如在下面的文字比賽:

/* text text 

text 
text 

text */ 

text text 
/* text text text text text text 

text text */ 

我想選擇的兩場比賽之間/ *和*/

但lex匹配整個外圍比賽,不會返回兩個! 我用這個表達式:

\/\*(.|\n)*\*\/ 

如何選擇,而不是整個外一個內部比賽嗎? 謝謝

+0

這真的是詞法分析器的工作嗎?這不是解析器的工作嗎? – Svante 2009-07-23 07:39:38

回答

1
\/\*([^*]|\n|\*+[^*/])*\*+\/ 

發生了什麼事是*是貪婪 - 只要一個字符串作爲可能的,它將匹配。前面的表達式通過確保正則表達式只能在字符/後沒有跟隨的情況下分開處理字符*。這是通過具有正則表達式的室內單元完成是

  • 一個字符,這不是*
  • 換行符
  • 的* S後跟一個字符的字符串,這不是/
一個

最後,有一串*後接一個/。 (注意:以前的版本沒有正確處理這種情況,我真的希望flex有*?操作符。)

+0

同樣的結果哥們! – 0xFF 2009-04-29 20:56:57