@Lepeshka

Какое регулярное выражение использовать?

Допустим исходная строка такая: «abcd#message!!#efgh”, либо «abcd#!error!#efgh». Мне нужно вытащить либо message, если между восклицательными знаками пусто, либо error, если между решеткой и первым восклицательным знаком пусто. По условию, если есть message, то нет error и наоборот. message и error это просто пример, на месте которых будут данные, а ! и # разделители, которые есть всегда. Простыми словами, если сообщение есть, то и ошибки нет, а если есть ошибка, то нет сообщения и нужно достать то, что есть.
  • Вопрос задан
  • 79 просмотров
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Так?
(?:#([^!#]+)!!#)|(?:#!(.+)!#)
https://regex101.com/r/18PVEe/2

Или так:
#!?(.+?)!{1,2}#
https://regex101.com/r/18PVEe/3/

В обоих случаях я исхожу из предположения, что ни в строке с ошибкой ни в строке сообщения нет символов !#.
Ответ написан
Комментировать
adressmoeistranici
@adressmoeistranici
Делатель
(?:.*#!(.*)!#)|(?:.*#(.*)!!#)

первая группа захвата ошибка
вторая группа захвата сообщение
типо проверить что ошибки нет сначала надо
сообщение не может начинаться с восклицательного знака и содержать решотку(решетка просто substring'ает содержимое), но может заканчиваться на восклицательную кашу
Wddd!!! ы!!!
Wddd!!! ы!!в!
а ошибка не может содержать #!(просто substring'ает содержимое) может иметь восклицательную кашу хоть где
!!!Wddd!!!
!ы!ы!Wddd!s!!
#0234 !ы!Wddd!s!!
!ы!##W#ddd!#s только в конце решотка не может стоять
наверно все
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы