Как указать регулярное выражение для маршрута на процессоре контента в NiFi? - PullRequest
1 голос
/ 24 мая 2019

В нифи я роутинг на основе контента.Я использую RouteOnContent от nifi. Итак, как мне маршрутизировать, указав регулярное выражение

Мой входной контент:

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

Я хотел проверить, присутствует ли testreg весь контент (слово) всодержимое потока файла.Итак, я проверил с

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

Но это не соответствует контенту, так что, какое правильное регулярное выражение будет использоваться в Nifi.

1 Ответ

2 голосов
/ 24 мая 2019

Редактировать: Было бы очень разумно проверить, окружен ли искомый шаблон кавычками, а затем двоеточием, поскольку образец 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);
...