我试图在Go中使用负向前瞻:
以下正则表达式: BBB(((?!BBB).)*)EEE
http://rubular.com/r/Zw1vopp1MF
但是在Go中我得到:
error parsing regexp: invalid or unsupported Perl syntax: `(?!`
Run Code Online (Sandbox Code Playgroud)
还有其他选择吗?
dyo*_*yoo 23
由于技术原因,不支持否定前瞻,特别是因为它与库的O(n)时间保证冲突.请参阅关于此的golang-nuts小组讨论,以及Wild 中正则表达式匹配中的警告部分.
您可以表达您所描述的正则表达式而不会出现负面前瞻:
BBB([^B]|B[^B]|BB[^B])*EEE
Run Code Online (Sandbox Code Playgroud)
这是一个示例:
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))
}
Run Code Online (Sandbox Code Playgroud)
dlclark/regexp2是 .NET 框架System.Text.RegularExpressions.Regex引擎的一个端口。
.NET 字符串和 Go 字符串之间存在一些根本区别,这也需要从 Go 框架正则表达式引擎中借鉴一些东西。我在移植期间清理了一些更脏的位(regexcharclass.cs 很糟糕),但解析树、代码发出,因此匹配的模式应该是相同的。
它的名字在关于 O(n) 正则表达式的冗长讨论结束时被删除,并被警告:
但是,我建议谨慎,因为基于 re2 的引擎有一些好处,而这些好处是具有环视功能的更全功能的引擎所无法提供的。如果你有选择,那么坚持使用标准库。
功能的成本是一个较慢的实现。
根据您的示例和预期输出,以下内容可行。
re := regexp.MustCompile(`BBB([^B]*)EEE`)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15669 次 |
| 最近记录: |