Вы можете выбрать значения из групп захвата?
(?:--\*\*--|^)(.*?-oy-.*?)(?:--\*\*--|$)
?: - Группа без захвата, соответствует разделителю, началу или концу строки, но делаетне создать группу захвата
*?- Ленивое совпадение, поэтому вы только захватываете содержимое поля
https://regex101.com/r/aUAvcx/1
--- Второй удар в этом случае следует ---
Это запутанно.Надеюсь, вы можете использовать Lookahead и Lookbehind.Последняя проблема, с которой я столкнулся, заключалась в том, что «Greedy» и еще до этого высасывали поле.Поэтому мне пришлось добавить исключение в группу захвата для вашего разделителя.
Проверьте, работает ли это для вас.
(?<=--\*\*--|^)((?:(?:(?!--\*\*--).)*)-oy-(?:(?:(?!--\*\*--).)*))(?=--\*\*--|$)
https://regex101.com/r/aUAvcx/3
По сути, (?: Мы не получаем слишком много групп захвата для работы.
Это состоит из трех частей:
- Взгляд за спиной - Убедитесь, что полеобрамляется разделителем (или началом строки)
- Группа захвата - захватить содержимое поля, убедившись, что разделитель не засосан в него
- Взгляд в будущее - Убедитесь, чтополе обрамлено разделителем (или концом строки)
Что касается группы захвата, я проверяю левую и правую часть -oy-, чтобы убедиться, что разделитель неесть.