Выражение Regex: получение всех данных до следующего совпадения - PullRequest
0 голосов
/ 05 августа 2020

, поэтому у меня есть несколько разных строк, например:

1. remove #someEntry set #someKey = :someValue
2. set #someOtherKey = :someOtherValue

Мне нужно какое-то выражение регулярного выражения, которое дает мне все после удаления, установки, добавления или удаления до конца строки, если это последнее совпадение или до следующего (удалить, установить, добавить, удалить).

Итак, я попробовал следующее регулярное выражение: (?:(set|remove|add|delete).*((?=set|remove|add|delete)))

Но это вернет только remove #someEntry для 1. линия, но ничего для 2 линии. Я пытаюсь использовать Regex, но не могу найти, что ищу: (

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 05 августа 2020

Вам не нужно помещать группу захвата вокруг альтернатив, но вокруг части, которую вы хотите захватить, чтобы ссылаться на нее.

Вы можете сопоставить любую из альтернатив, за которой следует необязательные пробельные символы. Затем захватите в группе как минимум возможное количество символов, кроме новой строки, пока вы не сможете утверждать, что справа есть 0+ пробельных символов, за которыми следует любая из альтернатив или конец строки $

Используйте граница слова \b, чтобы слова не были частью большего слова.

\b(?:set|remove|add|delete)\b\s*(.*?)\s*((?=\b(?:set|remove|add|delete)\b|$))

Regex demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...