2017-02-25 25 views
0

regexp在Go的標準庫是相當的差,所以我需要一個更強大的引擎,就像在Python正則表達式(PIP安裝正則表達式),支持遞歸,backref,前瞻/後面,等等。我發現: https://godoc.org/github.com/dlclark/regexp2 .NET兼容,這是相當不錯的;但是,遞歸不能正常工作。如何在Windows上使用基於cgo的軟件包?

和幾個綁定PCRE,例如: https://godoc.org/github.com/glenn-brown/golang-pkg-pcre/src/pkg/pcre

這樣,我怎麼能使用Win64上這個綁定?

+1

順便說一句,你知道,圍棋都有'regexp'封裝中實現這樣[是有原因的(https://swtch.com/~rsc/regexp/regexp1.html)?要了解RE引擎允許非決定性RE的執行時間可能導致哪些問題,請從[this]開始(http://stackstatus.net/post/147710624694/outage-postmortem-july-20-2016)。 – kostix

+0

是的,我讀過這個。但我不在乎。我在Python中使用正則表達式模塊來解析我自己寫的「蜘蛛」-bot中的網頁。一切都很好=)有時會崩潰,很少會掛起 - 通常的問題。 – dif05g3n

+0

的蟒蛇,我用多,在旅途中,我想我需要這樣的東西的方式通過超時 – dif05g3n

回答

0

您可以考慮使用C++標準庫std::regex(沒有第三方庫)。包裹邏輯try塊,使用catch(...){return ERROR;}捕捉任何錯誤,並宣佈C函數extern "C"這樣你就可以打電話CGO。


https://github.com/golang/go/wiki/cgo(有一個關於Windows的部分):

爲了使用CGO在Windows上,您還需要首先安裝 gcc編譯器(例如,mingw- w64),並且在使用cgo編譯之前,在您的 PATH環境變量中包含gcc.exe(等)。


話雖這麼說,我還是覺得你應該考慮與regexp包貼,並設法使正則表達式儘可能的簡單。因爲複雜的正則表達式可能會影響代碼的可讀性。另一個問題是它們有時會引入難以發現和修復的細微錯誤。所以用Go代替正則表達式編寫更多的代碼實際上可以讓生活更輕鬆。

+0

THX的答案),但「複雜的正則表達式可能傷的代碼的可讀性」 - 我自寫用於我的任務的正則表達式生成器腳本(例如,HTML解析)。生成新的比編輯現有的更容易。 – dif05g3n

+0

我想這很好,只要它在智力上可管理。 – cshu

相關問題