Golang 正则表达式匹配字符串仅对使用 OR 运算符分隔的字符串列表中的最后一个子字符串失败 |
Posted
技术标签:
【中文标题】Golang 正则表达式匹配字符串仅对使用 OR 运算符分隔的字符串列表中的最后一个子字符串失败 |【英文标题】:Golang regex match string fails only for last substring in a list of strings separated using OR operator | 【发布时间】:2021-12-17 02:17:09 【问题描述】:我有一个正则表达式
"^test\/053783914460|182782814227|161046048738\/test\/\\S+\/\\d4\/"
我认为会匹配这个字符串: “test/161046048738/test/random/2021/”.
但它不匹配。不知道为什么它只匹配最后一个数字,当它匹配由或运算符 | 分隔的列表中的其他数字时,例如“test/182782814227/test/random/2021/”
https://play.golang.org/p/WsB0_C8yhHy 是我想要理解的脚本。
对不起,我是 golang 正则表达式的新手。
【问题讨论】:
【参考方案1】:这是你的固定代码:
package main
import (
"fmt"
"regexp"
)
func main()
path := "test/161046048738/test/random/2021/"
result, err := regexp.MatchString(`^test/(?:053783914460|182782814227|161046048738)/test/[^/\s]+/\d4/`, path)
if err != nil
fmt.Println(err)
fmt.Println("Value matched regex: ", result)
请参阅Go playground demo。
详情:
^
- 字符串开头
test/
- 文字文本
(?:053783914460|182782814227|161046048738)
- 三种选择之一
/test/
- /test/
子字符串
[^/\s]+
- 除空格和/
之外的一个或多个字符
/\d4/
- /
,四位数字和一个 /
字符。
【讨论】:
谢谢你,但我仍在努力理解为什么我的不起作用。为什么我不能使用 \S+ 而不是 [^/\s]+? 我们为什么需要?:对于两种选择之一,这不是我们使用的原因吗?运营商? @RiyaJohn\S
匹配 /
字符,如果您需要匹配多个部分而不仅仅是一个,则使用 \S+
。 (?:...)
是一个非捕获组,它比捕获组更有效,尤其是当您不使用捕获的文本时。您需要在此处对备选方案进行分组。以上是关于Golang 正则表达式匹配字符串仅对使用 OR 运算符分隔的字符串列表中的最后一个子字符串失败 |的主要内容,如果未能解决你的问题,请参考以下文章