Использование консоли в качестве источника данных, безусловно, выполнимо, но есть проблема, заключающаяся в том, что ваше приложение не будет отказоустойчивым, поскольку Flink не сможет перематывать и воспроизводить входной поток в случае сбоя. [114 ]
Но это часто делается для прототипов и экспериментов, обычно с SocketTextStreamFunction
, как в
env.addSource(new SocketTextStreamFunction("localhost", 9999, "\n", -1))
. Затем вы можете использовать netcat для подключения консоли к порту 9999
nc -lk 9999
[117 ] или, как требуют некоторые версии netcat,
nc -l -p 9000
В зависимости от того, чему Вы соответствуете против, и версия Perl, который Вы выполняете, могли бы быть некоторые regexes, которые действуют как эффективная атака "отказ в обслуживании" при помощи чрезмерных предвидений, lookbehinds, и другие утверждения.
Вы являетесь лучшими от разрешения только маленького, известного подмножества regex шаблонов и расширения его осторожно, поскольку Вы и Ваши пользователи изучаете, как использовать систему. Таким же образом то, что много блогов, комментируя системы позволяют только небольшое подмножество HTML-тэгов.
В конечном счете Синтаксический анализ:: RecDescent мог бы стать полезным, если необходимо сделать сложный анализ regexes.
Это
eval {
qr/$re/;
};
if ( $@ ) {
# do something
}
компилирует выражение и позволяет Вам восстановиться с ошибки.
Можно наблюдать за злонамеренным выражением, так как Вы только собираетесь сделать соответствие путем поиска этих шаблонов, которые позволили бы произвольному коду быть выполненным:
(?: \( \?{1,2} \{ # '(' followed by '?' or '??', and then '{'
| \@ \{ \s* \[ # a dereference of a literal array, which may be arbitrary code.
)
Удостоверьтесь, что Вы компилируете это с x
флаг.
Необходимо будет, вероятно, сделать некоторый уровень санитизации. Например, perlre страница справочника описывает следующую конструкцию:
(?{ code })
который позволяет исполняемый код в соответствии шаблона.
Я предложил бы не доверять никаким регулярным выражениям от пользователей. Если Вы на самом деле полны решимости сделать так, выполните жемчуг в инфекции (-T) режим. В этом случае Вам будет нужна некоторая форма проверки. Вместо того, чтобы использовать Синтаксический анализ:: RecDescent для записи Вашего собственного синтаксического анализатора регулярного выражения как другой ответ предлагает, необходимо использовать существующий YAPE:: синтаксический анализатор Regex regexp, который, вероятно, быстрее, был записан экспертом и работами как очарование.
Наконец, начиная с жемчуга 5.10.0, можно включить различные механизмы регулярного выражения в жемчуг (лексически!). Вы могли проверить, существует ли менее мощный механизм регулярного выражения, доступный, чей синтаксис более легко поддается проверке. Если Вы хотите спуститься по тому маршруту, прочитайте описание API, ре Авара:: механизм:: Плагин, или в общем выезде любой из сменных механизмов Авара.
Безопасный модуль имел бы какое-либо применение относительно компиляции/выполнения недоверяемых регулярных выражений?