регулярное выражение и подстрока postgresql - PullRequest
0 голосов
/ 14 февраля 2011

У меня есть регулярное выражение http\:\/\/domainname\.com\/\S{4}, которое должно перехватывать URL-адреса следующим образом: http://domainname.com/key4 в более длинном тексте.

Я хочу получить только ключ и сопоставить его с полем таблицы в моей базе данных postgres,

после того, как я попробовал некоторые вещи, я пришел к этому запросу (для захвата ключей):

SELECT substring(infos FROM '[http\:\/\/domainname\.com\/\S{4}]{7}' ) AS key FROM actions

в результате я получаю /domainname.com для каждой строки ... ну, нет ключей, так какВы можете видеть.

что я делаю не так?

Может кто-нибудь сказать мне, что означает {7}?

Ответы [ 2 ]

1 голос
/ 14 февраля 2011

{7} означает 7 раз по сравнению с предыдущим шаблоном. Таким образом, в этом случае различных символов между [ и ]. то есть [abc]{3} соответствует aaa cba или любой другой комбинации.

Я вполне уверен, что это не то, что вы хотите. Вы, вероятно, ищете что-то вроде этого:

SELECT substring('http://domainname.com/key4' from 'http://domainname\\.com/\\S{4}')
FROM actions
0 голосов
/ 14 февраля 2011

Это может быть то, что вы ищете в данном конкретном случае

select substring(substring('long text [http://domainname.com/key4] more text',E'http\:\/\/domainname\.com\/\\S{4}'),E'\\S{4}$');

, который извлечет ключевую часть, если ее длина составляет четыре символа.Если вы также ищете что-то вроде key456, то более подходящее соответствие, такое как

select substring(substring('long text [http://domainname.com/key467] more text',E'http\:\/\/domainname\.com\/key\\d+'),E'key\\d+$');

, может быть более подходящим

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