登录
首页 >  Golang >  Go问答

正则表达式找到具有优先顺序的匹配项?

来源:Golang技术栈

时间:2023-04-16 14:28:49 366浏览 收藏

哈喽!今天心血来潮给大家带来了《正则表达式找到具有优先顺序的匹配项?》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到golang,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

给定这样的代码:

str := "hi hey hello"
regexpr := `(?i)hello|hey|hi`
fmt.Println(regexp.MustCompile(regexpr).FindStringSubmatch(str))

它给出了这样的结果:

[hi]

但我想得到[hello]一个结果。因为在我的情况下,“你好”是第一优先,第二优先是“嘿”,然后是“嗨”。我怎样才能实现它?

我只知道将关键字放入切片并循环的解决方案。但它不会与单个正则表达式操作。

是否可以使用单个正则表达式操作?

正确答案

您应该记住,正则表达式引擎从左到右搜索匹配项。因此,“将优先级设置为替代”意味着“让每个替代匹配在当前位置右侧的任何位置”。

你应该使用

regexpr := `(?i).*?(hello)|.*?(hey)|.*?(hi)`

在这里,.*?将尽可能少地匹配除换行符之外的任何 0 个或更多字符。在代码中,使用

regexp.MustCompile(regexpr).FindStringSubmatch(str)[1]

请参阅Go 游乐场演示

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "hi hey hello"
    regexpr := `(?i).*?(hello)|.*?(hey)|.*?(hi)`
    fmt.Println(regexp.MustCompile(regexpr).FindStringSubmatch(str)[1])
}

好了,本文到此结束,带大家了解了《正则表达式找到具有优先顺序的匹配项?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>