#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 символов, отличных от:
использования класса отрицаемых символов