Похоже, вы do хотите сопоставить строки, содержащие двойные дефисы, но вы хотите разбить их на подстроки, которые этого не делают.Рассматривали ли вы разделить его между парами дефисов?Другими словами, разделить на:
(?<=-)(?=-)
Что касается вашего регулярного выражения, я думаю, что это то, что вы получили:
(?:[^-]+|-(?<!--)|\G-)+
-(?<!--)
будет соответствовать один дефис, ноесли следующий символ также является дефисом, совпадение заканчивается.В следующий раз \G-
поднимает второй дефис , потому что это следующий символ;единственный способ, который может произойти (кроме как в начале строки), - это прервать предыдущее совпадение в этой точке.
Имейте в виду, что это регулярное выражение больше зависит от вкуса, чем большинство;Я тестировал его на Java, но не все версии поддерживают \G
и lookbehinds.