Rego 正则表达式以匹配句子中的特定单词

Rego regex to match a specific word from a sentence

提问人:Katelyn Raphael 提问时间:4/18/2022 最后编辑:Katelyn Raphael 更新时间:4/18/2022 访问量:2422

问:

我写了一个正则表达式

 \blates(t|)?\b

在句子“/man/service/man-aaaaaa-lllll-latest/zzzn2-iii-ooo-x00_00-gg”中搜索单词“latest”。

我正在通过 Rego playground 在“Rego”中测试一个规则,每当句子中有一个单词“latest”时,我都想得到一个布尔输出为“true”。

Rego Playground 链接: https://play.openpolicyagent.org/p/e3vDQyYKlc

Rego 输入

{
    "message": "/man/service/man-aaaaaa-lllll-latest/zzzn2-iii-ooo-x00_00-gg"
}

Rego 规则:

package play

default hello = false

hello {
    m := input.message
    regex.match("\blates(t|)?\b", m)
}

电流输出:

{
    "hello": false
}

每当正则表达式与单词“latest”匹配时的预期输出:

{
    "hello": true
}

请建议我是否必须使用任何其他正则表达式条件才能达到预期的结果 https://www.openpolicyagent.org/docs/latest/policy-reference/#regex

正则表达式 条件语句 boolean-logic open-policy-agent rego

评论

0赞 Wiktor Stribiżew 4/18/2022
也许这是反斜杠的常见问题?尝试"\\blatest?\\b"
0赞 Katelyn Raphael 4/18/2022
我试过了,但它与句子“/man/service/man-aaaaaa-lllll-latest/zzzn2-iii-ooo-x00_00-gg”中的“latest”一词不匹配"\\blatest?\\b"
1赞 Wiktor Stribiżew 4/18/2022
尝试 1) 或 2)regex.match(".*\blatest?\b.*", m)regex.match(".*\\blatest?\\b.*", m)
1赞 Katelyn Raphael 4/18/2022
@WiktorStribiżew谢谢你,第二个为我提供了预期的结果。Rego playground 链接供您参考: play.openpolicyagent.org/p/ej12txWc9x
0赞 Wiktor Stribiżew 4/18/2022
嗯,那我想甚至会起作用。我到了那里。regex.match("\\blatest?\\b", m)"hello": true

答:

2赞 Wiktor Stribiżew 4/18/2022 #1

你可以使用

regex.match("\\blatest?\\b", m)

regex.match(".*\\blatest?\\b.*", m)

请参阅 Rego playground 演示

请注意,这是一个与空字符串匹配的捕获组,并且基本上等于与可选字符匹配的模式(无需捕获 )。(t|)?tt?tt