【问题标题】:How to specify regex for route on content processor in NiFi?如何在 NiFi 中为内容处理器上的路由指定正则表达式?
【发布时间】:2019-05-24 20:18:21
【问题描述】:

在 nifi 中,我基于内容进行路由。我正在使用 nifi 的 RouteOnContent 那么,如何通过指定正则表达式进行路由

我输入的内容是:

{
"testreg":{
"test1":"test2",
"test3":"test4"
}
}

我想测试流文件内容中是否存在testreg 整个内容(单词)。 所以,我检查了

  1. testreg
  2. (testreg)
  3. .*testreg.*
  4. (.*testreg.*)

但它与内容不匹配,那么,在 Nifi 中使用的正确正则表达式是什么。

【问题讨论】:

    标签: regex apache-nifi regex-lookarounds regex-group regex-greedy


    【解决方案1】:

    编辑:检查我们正在寻找的模式是否被引号包围并后跟冒号非常有意义,因为模式testreg 也可以简单地出现在其他地方.在这种情况下,我们得到最后一个匹配项,它不是OK。所以,最终,这是:

    [\s\S]*?(?<=")(testreg)(?=":)[\s\S]*?
    

    将是我们正在寻找的理想答案。


    也许,在这里我们想要一个可以传递新行的表达式。我不太确定我们想要的输出是什么,但是我们可以开始测试一些选项,例如这些表达式:

    [\s\S]*(testreg)[\s\S]*
    

    [\w\W]*(testreg)[\w\W]* 
    

    [\d\D]*(testreg)[\d\D]*
    

    ([\s\S].*?)(testreg)?
    

    Demo

    这个演示表明我们可以捕获并返回我们想要的testreg

    const regex = /[\s\S]*(testreg)[\s\S]*/gm;
    const str = `{
    "testreg":{
    "test1":"test2",
    "test3":"test4"
    }
    }`;
    const subst = `$1`;
    
    // The substituted value will be contained in the result variable
    const result = str.replace(regex, subst);
    
    console.log('Substitution result: ', result);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 2019-04-29
      相关资源
      最近更新 更多