2016-08-10 3 views
0

У меня есть эта строка, которая будет иметь структуру, как это:Matching группы по запятой

somevalue, secondvalue, thirdvalue

Там всегда будет три значения, и они будут через запятую. Фактические значения, которые они сами могут содержать ,.

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

app.weeks = 999, 999, app.weeks - FLOOR(DATEDIFF(DAY, GETDATE(), app.register)/7)

Где app.weeks = 999 одно целое значение, за которым следует , и 999 одно целое значение, за которым следует ,

и

app.weeks - FLOOR(DATEDIFF(DAY, GETDATE(), app.register)/7) - еще одно значение.

Использование этой строки в качестве примера и со структурой выше.

Имея в виду, что значения не являются фиксированными, не всегда будет conatin слово "app.weeks = 999}

Я хочу разделить это на три секции.

matches (
    $1: app.weeks = 999 
    $2: 999 
    $3: app.weeks - FLOOR(DATEDIFF(DAY, GETDATE(), app.register)/7) 
) 

может прийти в любом порядке:

999, app.weeks - FLOOR(DATEDIFF(DAY, GETDATE(), app.register)/7), app.weeks = 999 

app.weeks - FLOOR(DATEDIFF(DAY, GETDATE(), app.register)/7), app.weeks = 999, 999 

или комбинацию:

app.weeks - FLOOR(DATEDIFF(DAY, GETDATE(), app.register)/7), app.weeks = 999, app.weeks - FLOOR(DATEDIFF(DAY, GETDATE(), app.register)/7) 

В таких случаях все еще нужно, чтобы соответствовать, как это:

matches (
    $1: app.weeks - FLOOR(DATEDIFF(DAY, GETDATE(), app.register)/7) 
    $2: app.weeks = 999 
    $3: app.weeks - FLOOR(DATEDIFF(DAY, GETDATE(), app.register)/7) 
) 

Вышеуказанные требования приложения.

Это моя попытка:

^(.+,)(.+,)(.+)$ 

Но это ничего не найдено. Каким должно быть мое регулярное выражение?

На стороне примечание, в этом требовании я пытаюсь преобразовать операторы IF MYSQL в операторы TSQL Case на лету.

ответ

1

Благодарим вас за разъяснение вашего вопроса.

В принципе, вы хотите найти все между запятыми, которые не находятся внутри скобок.

Регулярное выражение

(?<capture>[^,()]+(?<par>\((?:[^()]*(?&par)*)*\))?) 

должен сделать трюк.

Обратите внимание, что она разделяет данные на две метки:

  • захват: это данные, которые вы просили
  • пара: это скобка, которая может существовать, она используется для рекурсии в регулярном выражении но вам должно быть неинтересно.

In action

+0

Обновленный ответ, сделал это работает сейчас? – Skogsv

Смежные вопросы