【问题标题】:Regex Match with Square Bracket and letters正则表达式匹配方括号和字母
【发布时间】:2021-04-23 22:54:57
【问题描述】:

如何使用 kusto 匹配包含字母和方括号的正则表达式?

我将级别作为参数传递,并希望它达到路径中提到的级别。我有以下正则表达式模式要匹配,但它不包括方括号。

let level=4;
let string1= "abc/def/[id]/ghi"
let regex1=replace('level',tostring(level),'/?(([-a-z0-9]+/?){level})');
let result = extract(regex1,1,string1);

输出:abc/def
预期输出:abc/def/[id]/ghi
(最高级别 4,一旦找到方括号就会丢弃字符

【问题讨论】:

  • 以下任何答案有帮助吗?如果是这样,请接受(here 的原因)。否则,请添加评论以解释您缺少的内容。谢谢。

标签: regex azure-data-explorer kql


【解决方案1】:

您应该通过在方括号前放置一个双反斜杠来转义方括号,如下所示:

let string1 = "abc/def/[id]/ghi";
let result = extract("([-a-z0-9\\[\\]]*/){1,6}", 0, string1);
print result

结果:

abc/def/[id]/

【讨论】:

    【解决方案2】:

    您可以匹配字符类中的字符,也可以用方括号将它们括起来以匹配开头的字符和结尾的字符。

    量词{0,0}匹配第一部分,{0,1}匹配以/开头的部分等等。

    如果量词的第二部分大于{0,7}等字符串中出现的最大次数,你仍然会得到最高级别。

    您可以添加一个锚来断言字符串的开头以防止部分匹配。

    ^/?(?:[-a-z0-9]+|\[[-a-z0-9]+\])(?:/(?:[-a-z0-9]+|\[[-a-z0-9]+\])){0,2}
    

    Regex demo

    更广泛的匹配可能是将方括号添加到字符类,但这也可能匹配单个匹配项。

    例如重复2次:

    ^/?[\]\[a-z0-9-]+(?:/[\]\[a-z0-9-]+){0,2}
    

    Regex demo

    如果反斜杠必须进行双重转义:

    ^/?[\\]\\[a-z0-9-]+(?:/[\\]\\[a-z0-9-]+){0,2}
    

    【讨论】:

    • 由于某种原因,此逻辑在 kusto 中不起作用。我用我正在使用的 kusto 函数更新我的帖子。此外,如果我们将级别传递为 5(大于路径字符串中存在的斜杠数量,我希望它返回字符串的最高级别,比如如果字符串只有 3 个路径,它应该返回到第 3 级即使传递的级别值为5)
    • @Swasti 你能像这样试试吗^/?[\]\[a-z0-9-]+(?:/[\]\[a-z0-9-]+){0,2} 或者使用双转义反斜杠^/?[\\]\\[a-z0-9-]+(?:/[\\]\\[a-z0-9-]+){0,2}
    猜你喜欢
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 2023-04-02
    • 2011-08-03
    • 1970-01-01
    相关资源
    最近更新 更多