Регулярное выражение — символы после разделителя, ограниченные числом

#regex #regex-lookarounds

#регулярное выражение #поиск регулярных выражений

Вопрос:

Я пытаюсь собрать некоторое регулярное выражение, чтобы получить только первые 16 символов после :

 blahblahblah:fakeblahfakeblahfakeblahfakeblah
  

Я придумал
/[^:]*$
но это соответствует всему после двоеточия, и если я попытаюсь обрезать его оттуда, он фактически начинается с последнего символа.

Комментарии:

1.Вы могли бы использовать группу захвата, если после первого двоеточия ^[^:]*:([^:]{16}) regex101.com/r/xpL2DY/1 или после последнего двоеточия ^.*:([^:]{16})

Ответ №1:

Используйте

 (?<=:)[^:]{16}(?=[^:]*$)
  

Смотрите доказательство

Объяснение

 --------------------------------------------------------------------------------
  (?<=                     look behind to see if there is:
--------------------------------------------------------------------------------
    :                        ':'
--------------------------------------------------------------------------------
  )                        end of look-behind
--------------------------------------------------------------------------------
  [^:]{16}                 any character except: ':' (16 times)
--------------------------------------------------------------------------------
  (?=                      look ahead to see if there is:
--------------------------------------------------------------------------------
    [^:]*                    any character except: ':' (0 or more
                             times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
    $                        before an optional n, and the end of
                             the string
--------------------------------------------------------------------------------
  )                        end of look-ahead
  

Комментарии:

1. Это сработало идеально, и большое спасибо за подробное объяснение. Не часто я ухожу от вопроса, узнав так много

Ответ №2:

Вы также можете использовать группу захвата, сначала сопоставляя до последнего вхождения : , а затем записывая в группу 1 соответствие 16 символам, отличным от :

 ^.*:([^:]{16})
  

Объяснение

  • ^ Начало строки
  • .*: Сопоставьте последнее вхождение :
  • ([^:]{16}) Группа захвата 1, сопоставьте 16 символов, отличных от : использования класса отрицаемых символов

Демонстрация регулярных выражений