[help] Регулярки в яве

Gaikotsu

яжпрограммист
Легенда
Победитель в номинации 2023
Победитель в номинации 2022
Победитель в номинации 2021
Участник Новогоднего Фонда 2021
Эксперт
Знаток
Просветитель
Магистр реакций
Знаток письма
Куратор Данных
Медаль Благодарности
Старожил II степени
Старожил I степени
Победитель в номинации 2020
Победитель в номинации 2019
Клиент разработчик
Преподаватель
За веру и верность форуму
Победитель в номинации 2018
Медаль за активность на Форуме
За заслуги перед форумом
Web разработчик
Разработчик
За знание датапака
За знание ядра
Сообщения
1 518
Розыгрыши
0
Решения
24
Репутация
6 004
Реакции
2 576
Баллы
2 188
Вопрос к тем, кто может в регулярки.

Имеется регулярка такого вида
Код:
\[([^\]\|]*?)\|([^\]]*?)\|([^\]]*?)\]
она разбирает строки вида
Код:
[xxx|yyy|zzz]
на три отдельных элемента и подставляет эти элементы в другую строку вместо $1/$2/$3
Код:
<button ALIGN=LEFT ICON="$1" action="bypass -h $2">$3</button>
ну и собственно вопрос в том, можно ли как-то эту регулярку модифицировать, чтобы она так же воспринимала и могла разобрать строку вида
Код:
[yyy|zzz]
при этом выдав для $1 какое-то определенное дефолтное значение?

Да, понимаю, что можно не извращаться и просто после обработки этой регуляркой пройтись еще раз по строке такой
Код:
\[([^\]\|]*?)\|([^\]]*?)\]
и подставить результат в строку вида
Код:
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h $1">$2</button>
Но мне как раз и не очень нравится то что требуется два раза один и тот же текст гонять через почти одинаковые регулярки.
 
Последнее редактирование:
Поэкспериментировать с регулярками кстати можно тут -
 
Последнее редактирование модератором:
Поэкспериментировать с регулярками кстати можно тут -
 
Последнее редактирование:
дык мне особо толку нет от этих редакторов - я сами регулярки знаю очень слабо, на уровне "ух ты, знакомые буквы".
 
Можно попробовать сделать подгруппы (главное, чтобы разные версии не могли пересекаться друг с другом). А-ля:
Код:
\[((xxx\|*?)\|(yyy*?)\|(zzz*?)|((yyy*?)\|(zzz*?)))\]
Конечно же, нужно будет переделать работу с регуляркой в коде, т.к. порядок групп изменится. В нашем случае, первая группа будет показывать подгруппу:
Код:
xxx|yyy|zzz
или
Код:
yyy|zzz

2-4 группы могут быть пустыми, это у нас:
Код:
xxx
yyy
zzz

5 группа, может быть пустой, это:
Код:
yyy|zzz

6-7 группы, могут быть пустыми, это:
Код:
yyy
zzz

И да, рекомендую использовать данные чекеры и
 
Назад
Сверху Снизу