Regex: подсчет совпадений в определенном разделе строки - PullRequest
1 голос
/ 20 января 2020

Я пытаюсь посчитать размер массива в случайном наборе символов, например;

qweqe1wqeqjson=[1,2,5,3]

Выражение;

(?<=json=)?[0-9] 

Включает число 1 как матч тоже. Как вы видите, решение, которое я пытаюсь реализовать, будет подсчитывать совпадения только после json=.

1 Ответ

1 голос
/ 21 января 2020

Вы можете использовать

grep -oP '(?:\G(?!^)\s*,\s*|json=\[)\K\d+' <<< "$s" | wc -l

См. онлайн-демонстрацию

-oP означает:

  • o - выводить только сопоставленные тексты
  • P - проанализировать шаблон регулярных выражений с помощью механизма PCRE

Шаблон (?:\G(?!^)\s*,\s*|json=\[)\K\d+ означает:

  • (?:\G(?!^)\s*,\s*|json=\[) - либо конец предыдущего успешного совпадения, а затем ,, заключенный в 0+ пробельных символов или json=[ подстрока
  • \K - отбросить весь найденный текст
  • \d+ - 1+ цифр

wc -l считает совпадения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...