Регулярное выражение для извлечения всех слов, начинающихся с двоеточия

Я хотел бы использовать регулярное выражение для извлечения параметров «связать переменную» из строки, содержащей оператор SQL. В Oracle параметры имеют префикс двоеточия.

Например, вот так:

SELECT * FROM employee WHERE name = :variable1 OR empno = :variable2

Могу ли я использовать регулярное выражение для извлечения «variable1» и «variable2» из строки? То есть, получить все слова, которые начинаются с двоеточия и заканчиваются пробелом, запятой или концом строки.

(Мне все равно, если я получу одно и то же имя несколько раз, если одна и та же переменная использовалась несколько раз в выражении SQL; я могу разобраться с этим позже.)

13.10.2009 08:04:31
4 ОТВЕТА
РЕШЕНИЕ

Для того, чтобы справиться с таким простым делом самостоятельно, вы должны взглянуть на быстрый старт regex .

В то же время использовать:

:\w+
3
13.10.2009 08:15:51

Это может сработать:

:\w+

Это просто означает «двоеточие, за которым следует один или несколько символов класса слова ».

Это, очевидно, предполагает, что у вас есть POSIX-совместимая система регулярных выражений, которая поддерживает синтаксис класса слов.

Конечно, это соответствует только одной такой ссылке. Чтобы получить оба, и пропустить шум, что-то вроде этого должно работать:

(:\w+).+(:\w+)
4
13.10.2009 08:07:48

Если ваш анализатор регулярных выражений поддерживает границы слов,

:[a-zA-Z_0-9]\b
1
13.10.2009 08:32:49
:это уже граница слова, поэтому вы можете пропустить первый \b.
tangens 13.10.2009 08:16:48

Попробуйте следующее:

sed -e 's/[ ,]/\\n/g' yourFile.sql | grep '^:.*$' | sort | uniq

предполагая, что ваш SQL находится в файле с именем "yourFile.sql".

Это должно дать список переменных без дубликатов.

0
13.10.2009 08:20:12
Это не работает для разделителей без пробелов.
Blindy 13.10.2009 08:10:36
Обновлено для обработки запятых. Q указывает пробел, запятую или eol. Так что это должно охватить это сейчас.
dave 13.10.2009 08:20:52