RegEx и соответствующие коды справа налево
Вопрос
Немного повозился с RegEx, у меня 4 кода в строке.
КОД4:КОД3:КОД2:КОД1
каждый код является необязательным, кроме CODE1.
Так что я мог бы иметь ab:bc:de:fg
или
до н.э.::fg
из
аб:::фг
В каждом случае приведенного выше CODE1 = fg dnd, хоть убей, я не могу разобраться с RegEX.
Это было бы легко сделать как стандартный анализ строк, но, к сожалению, из-за бизнес-объектов это нужно делать через регулярное выражение :-( и возвращать через vb.net RegEX.matche,groups("Code1") fg (надеюсь, это сделает смысл)
Заранее благодарю за любую помощь
В итоге получилось немного RegEx, который выполняет свою работу, немного беспорядочно, но работает.
(^(?<code1>[\w]*)$)|(^(?<code2>[\w]*):(?<code1>[\w]*)$)|(^(?<code3>[\w]*):(?<code2>[\w]*):(?<code1>[\w]*)$)|(^(?<code4>[\w]*):(?<code3>[\w]*):(?<code2>[\w]*):(?<code1>[\w]*)$)
Та все
Решение
Здесь нет необходимости использовать регулярное выражение.
Я не знаю, какой язык вы используете, но разделите строку на «:», и вы получите массив кодов.
Если вы действительно просто хотите проверить, действительна ли строка для этого, тогда
/(\w*:){0,3}\w+/
соответствует вашему описанию и нескольким приведенным вами примерам.
Другие советы
Я не уверен, почему вам нужно сопоставлять коды справа налево.Просто используйте регулярное выражение, чтобы разделить строку:
/(.*):(.*):(.*):(.+)/
и тогда у вас есть КОД1 в $4, КОД2 в $3, КОД3 в $2, КОД4 в $1.
(CODE1)?:(CODE2)?:(CODE3)?:CODE4
будет работать - если ведущий:не имеет значения.В противном случае, если у вас не может быть ведущих двоеточий, перечислите:
(CODE1:(CODE2)?:(CODE3)?:|CODE2:(CODE3)?:|CODE3)?CODE4
Нет ничего особенного в том, что самая правая часть является обязательной, а самая левая — нет.