我似乎無法找到關於haskell的POSIX實現的體面文檔。 具體是模塊Text.Regex.Posix
。Haskell Posix中的多行匹配
任何人都可以指出我正確的方向使用字符串上的多行匹配嗎?
一種好奇的片段:
> extractToken body = body =~ "<textarea[^>]*id=\"wpTextbox1\"[^>]*>(.*)</textarea>" :: String
我試圖提取維基百科頁面的源,當多行參與然而,這種方法顯然不屬於以上。
我似乎無法找到關於haskell的POSIX實現的體面文檔。 具體是模塊Text.Regex.Posix
。Haskell Posix中的多行匹配
任何人都可以指出我正確的方向使用字符串上的多行匹配嗎?
一種好奇的片段:
> extractToken body = body =~ "<textarea[^>]*id=\"wpTextbox1\"[^>]*>(.*)</textarea>" :: String
我試圖提取維基百科頁面的源,當多行參與然而,這種方法顯然不屬於以上。
您可能需要import Text.Regex.Base.RegexLike
才能訪問makeRegexOpts
和朋友。
extractToken body = match regex body where
regex = makeRegexOpts (defaultCompOpt - compNewline) defaultExecOpt
"<textarea[^>]*id=\"wpTextbox1\"[^>]*>(.*)</textarea>"
好吧,既然Text.Regex.Posix
的defaultCompOpt = compExtended + compNewline
,即等效工作了作爲
extractToken body = match regex body where
regex = makeRegexOpts compExtended defaultExecOpt
"<textarea[^>]*id=\"wpTextbox1\"[^>]*>(.*)</textarea>"
拉出只是第一組,使用的RegexLike
其他實例之一。一種可能性是
extractToken body = head groups where
(preMatch, inMatch, postMatch, groups) =
match regex body :: (String, String, String, [String])
regex = makeRegexOpts compExtended defaultExecOpt
"<textarea[^>]*id=\"wpTextbox1\"[^>]*>(.*)</textarea>"
如果您想要做比Posix正則表達式更靈活或性能更好的任何事情,您可能需要使用PCRE後端。
pcre-light和regex-pcre都很好。
肯定是優先選擇,但是我們的研究小組來我們學校的服務器,誰可能會或可能不會批准增加新的模塊上運行此。 – 2009-06-22 19:37:06
我在這種情況下,解決了匹配
((.*)|\n*)*
儘管這可能並不總是可行取決於你的表達。 上述解決方案可能是最好的方法,如果你能夠。
很好,謝謝。此外,有沒有什麼辦法可以只返回匹配(。*),還是隻有在PCRE中? – 2009-06-22 21:02:16