Если механизм регулярных выражений поддерживает \K
(свободно, забудьте, что все совпадения до сих пор), можно использовать следующее регулярное выражение для сопоставления текста между вторым и третьим дефисом.
^(?:[^-]+-){2}\K[^-]+(?=-)
Обратите внимание, что это регулярное выражение не содержит группу захвата.
Демо
Это не соответствует Bar
в третьем примере, потому что есть только два дефиса. Чтобы сопоставить Bar
, просто удалите заглядывание (?=-)
.
Механизм регулярных выражений выполняет следующие операции.
^ match beginning of line
(?:[^-]+-) match 1+ chars other than '-' followed by '-'
in a non-capture group
{2} execute non-capture group twice
\K discard everything matched so far (reset the starting
point of the reported match)
[^-]+ match 1+ chars other than '-'
(?=-) match '-' in a positive lookahead
Если [^-]
не соответствует символу новой строки, измените его на [^-\r\n]
.
Если \K
не поддерживается, необходима группа захвата (а просмотр не поддерживается):
^(?:[^-]+-){2}([^-]+)-