Повторите выражение, пока оно не достигнет конца круглых скобок? - PullRequest
0 голосов
/ 10 февраля 2020

Я работал в Regx101 и возился с выражениями, однако я не могу понять, как повторять выражение, пока не будет достигнут определенный символ (завершающая скобка ')').

Я пытался [ ^)] * и это работает, но оно не повторяет выражения.

Это мое выражение до сих пор: CREATE \ s + TABLE \ s + (\ w *) (\ s + (\ w *) ) \ s + (\ w *) [,] [^)] *

Я пытаюсь получить часть (\ s + (\ w *) \ s + (\ w *) [,] повторять до тех пор, пока не будет достигнута скобка.

Моя тестовая строка: CREATE TABLE tableName (columnName, type, primary, columnName2, type2)

Это результаты, которые я получаю: введите описание изображения здесь

Ожидаемые результаты должны включать столбец 2 и тип 2 как отдельную группу.

Любая помощь приветствуется, а также любые решения Я еще не пробовал.

1 Ответ

0 голосов
/ 10 февраля 2020

Не совсем уверен, что именно вы хотите, но этот пример

echo 'CREATE TABLE tableName(columnName, type, primary, columnName2, type2)' \
| perl -nle '/CREATE\s+TABLE\s+(\w*)\s*\((\s*(\s*\w+ *,)+(\s*\w+)?)/ && print "$1\n$2"'

или эта немного более читаемая версия с модификатором /x

echo 'CREATE TABLE tableName(columnName, type, primary, columnName2, type2)' \
| perl -nle '/CREATE\s+TABLE\s+(\w*) \s* \( (\s*(\s*\w+\s*,)+ (\s*\w+)? )/x && print "$1\n$2"'

дает этот вывод

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