【问题标题】: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 整个内容(单词)。
所以,我检查了
testreg
(testreg)
.*testreg.*
(.*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)?
这个演示表明我们可以捕获并返回我们想要的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);