如何在NiFi中的内容处理器上为路由指定正则表达式?

时间:2019-05-24 20:18:21

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

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

我的输入内容是:

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

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

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

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

1 个答案:

答案 0 :(得分:2)

编辑:检查样式是否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);