gpt4 book ai didi

regex - 在 Go 中获取正则表达式的解析树

转载 作者:IT王子 更新时间:2023-10-29 00:44:20 24 4
gpt4 key购买 nike

我尝试使用 regex.syntax module访问已解析的正则表达式的各个标记但没有成功:我唯一能够输出的是正则表达式的简化/优化版本。

代码:

package main

import (
"fmt"
"regexp/syntax"
)

func main() {
p, e := syntax.Parse(`[0120-2]@[ab][0-9]`, 'i')

fmt.Println(p)
fmt.Println(e)
}

输出:

[0-2](?i:@)[A-Ba-b][0-9]
<nil>

谁能给我一个简单的例子,说明如何遍历并输出它的解析树?

最佳答案

您调用的 Parse 函数是正确的。当您调用 fmt.Println(p) 时,解析树被转换为字符串,这就是为什么您看到的输出只是一个等效的正则表达式。

Parse 的返回值是一个指向syntax.Regexp 结构的指针。要遍历返回的解析树,您需要查看返回结构的 Sub 字段,该字段列出了所有子表达式(指向 syntax.Regexp 结构的指针片段)。例如:

func printSummary(r *syntax.Regexp) {
fmt.Printf("%v has %d sub expressions\n", r, len(r.Sub))
for i, s := range r.Sub {
fmt.Printf("Child %d:\n", i)
printSummary(s)
}
}

参见 syntax package reference更多值得研究的领域:OpRune 是主要领域。

关于regex - 在 Go 中获取正则表达式的解析树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20581527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com