2014-02-26 32 views
0

我是Flex和Bison的初學者,我有一個問題,因爲正則表達式的領域對我來說是新的。Flex/Bison匹配2種不同的圖案,它們之間沒有空格

我有字符串掃描像「LOL TATA 93.00」 但事情是,白色空格是2個字與字母之間的強制性,但可選字與字母/字與數字之間。 我可以有像 「LOL TATA93.00」 「LOL TATA 93.00」 但從來沒有「LOLTATA 93.00」的字符串。

我的問題是,當有空間時,我可以輕鬆掃描和分析。 (發現大聲笑然後塔塔然後93.00) 但是,當我有TATA93.00,它失敗了,它需要TATA93.00作爲1個單詞,但我希望它認識到第一個TATA作爲一個單詞,然後93.00作爲另一個。

我無法像[A-Z] + [0-9。] +那樣在Flex文件中添加規則,因爲如果必須提供所有可能性,它將永遠不會結束。

我的問題是:Bison能否將TATA93.00分別視爲由[A-Z] {4}和[0-9。] +定義的2個單詞?

回答

3

flex總是識別出模式最長可能的匹配。所以,如果你的模式是:

[A-Z]+ 
[0-9.]+ 

和(電流)輸入LOLTATA93.00,然後彎曲將匹配LOLTATA再搭配93.00這似乎是你想要的。假設你忽略了空格,那麼輸入LOLTATA 93.00也會發生同樣的情況。

您需要更精確地確定您認爲是「單詞」的內容。最多是四個字母嗎?它可以包含數字嗎? (我認爲第二個問題的答案是「否」,但是從問題中不清楚)。只有通過精確匹配你想匹配的內容,才能寫出一個精確的模式來匹配它。

+0

傻了。我看着你的答案,並認爲「對我來說這是行不通的」。我開始編寫一個代碼在這裏公開,測試它並且工作。然後我看着我的原始代碼,然後我意識到我在我的flex文件中有一條規則破壞了其他文件。謝謝你讓我三思。 – blackmesa

相關問題