RegEx для сопоставления чисел в строке со специальными шаблонами - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь найти регулярное выражение, которое будет выполнять следующее сопоставление строк:

У меня есть DNS-запросы из журнала отладки DNS-сервера Windows, которые выглядят так:

(4)api3(7)central(6)sophos(3)com(0)

Для правильного анализав нашем решении SIEM я хотел бы сделать следующее:

пропустить первый и последний (цифра), чтобы я получил:

api3(7)central(6)sophos(3)com

, а затем заменить оставшиеся (цифра) на.

Если бы я мог только сопоставить (цифру), я мог бы заменить их функцией в SIEM Tool.

Я уже играл с некоторым регулярным выражением, но не нашел ничего, что указывало бы мне на решение.Я совершенно новичок в регулярных выражениях, так что, возможно, я что-то упустил.Я уже могу заменить все (цифры) точками, но это было легко.

1 Ответ

0 голосов
/ 14 мая 2019

Это выражение может удовлетворять первому имеющемуся у вас условию:

(\([0-9]+\))api3(\([0-9]+\))central(\([0-9]+\))sophos(\([0-9]+\))com(\([0-9]+\))

Вы также можете расширить его и добавить / уменьшить границу, если хотите, возможно, что-то похожее на это:

(\([0-9]+\))(api3)\([0-9]+\)(central)\([0-9]+\)(sophos)\([0-9]+\)(com)\([0-9]+\)

Затем замените его на что-то похожее на:

$2.$3.$4.$5

Демо

enter image description here

Схема RegEx

Вы можете визуализировать свои выражения в jex.im :

enter image description here

JavaScript Test

const regex = /(\([0-9]+\))(api3)\([0-9]+\)(central)\([0-9]+\)(sophos)\([0-9]+\)(com)\([0-9]+\)/gm;
const str = `(4)api3(7)central(6)sophos(3)com(0)`;
const subst = `$2.$3.$4.$5`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);

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


Редактировать:

Если вы хотите захватить первое и последнее число, вы можете просто сопоставить и заменить его на выражение , подобное этому :

(\([0-9]+\))(.+)(\([0-9]+\))

Затем вы можете просто захватить остальных посередине с помощью другого выражения :

 (\([0-9]+\))
...