我試圖去使用負看看aheads:負向前看去正則表達式
以下正則表達式:BBB(((?!BBB).)*)EEE
http://rubular.com/r/Zw1vopp1MF
然而,在轉到我得到:
error parsing regexp: invalid or unsupported Perl syntax: `(?!`
有沒有其他的選擇?
我試圖去使用負看看aheads:負向前看去正則表達式
以下正則表達式:BBB(((?!BBB).)*)EEE
http://rubular.com/r/Zw1vopp1MF
然而,在轉到我得到:
error parsing regexp: invalid or unsupported Perl syntax: `(?!`
有沒有其他的選擇?
排除模式不支持技術上的原因,特別是因爲它與O(N)的圖書館 - 時間保證衝突。關於此,請參閱golang-nuts group discussion以及Regular Expression Matching in the Wild中的注意事項部分。
你可以表達你不排除模式已經描述了正則表達式:
BBB([^B]|B[^B]|BB[^B])*EEE
下面是一個example證明:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`BBB([^B]|B[^B]|BB[^B])*EEE`)
fmt.Printf("%#v\n", re.FindAllString("BBB EEE BBB..BBB...EEE", -1))
}
@ hwnd的解決方案更簡單。我假設,當你說'BBB'時,你並不真正的意思是'BBB',而是一些任意的開始字符序列,然後是一系列結束字符。但也許你正在尋找''「BBB」'和''EEE「'。 :P – dyoo 2014-11-07 01:08:26
dlclark/regexp2是.NET框架的System.Text.RegularExpressions.Regex
引擎的端口。
.NET字符串和Go字符串之間存在一些根本區別,它們需要從Go框架正則表達式引擎中借用一些內容。我在端口期間清理了一些較髒的位(regexcharclass.cs非常糟糕),但是分析樹,代碼被省略,因此匹配的模式應該是相同的。
它的名稱中去掉在lengthy discussion about O(n) regular expressions結束,並caveated:
然而,由於有不受更全功能提供給基於RE2引擎的好處我想提醒慎用引擎與周圍。如果你有選擇,然後堅持stdlib。
功能的成本是一個較慢的實施。
你想要什麼樣的預期輸出? – hwnd 2014-11-06 04:35:25
我想匹配BBB和EEE之間的所有內容。但是,如果有一個BBB的東西是BBB的東西,那麼其他的EEE。我只想匹配「BBB東西EEE」 – K2xL 2014-11-06 04:38:03
如果你確信單獨的'B'或'BB'不存在,那麼你可以做的唯一事情是http://regex101.com/r/aM5oU3/4串。 – vks 2014-11-06 04:53:40