Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Регулярные выражения / 23 сообщений из 23, страница 1 из 1
19.11.2017, 17:56
    #39555750
Dasha151515
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
Помогите, пожалуйста, разобраться как сделать запрос:
Напишите запрос, выбирающий фамилию сотрудника (поле last_name)
и его телефон (поле phone) для всех сотрудников. Причем в телефоне
все символы, кроме стоящих в начале и в конце, должны быть
заменены на символ «_». Например, «8-(912)- 123-45- 67» должен быть
заменён на «8_7».
...
Рейтинг: 0 / 0
19.11.2017, 18:30
    #39555768
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
Читаем доку:

^ - начало строки
$ - конец строки
. - один любой символ
* - повторение предыдущего символа/группы 0 или более раз
() - группировка
\n - ссылка на группу n

Посему:

^. - первый символ строки
.$ - последний символ строки
.* - любой символ повторенный 0 или более раз

Соединяем и группируем то что нам нужно:

(^.).*(.$)

Ну и:

Код: plsql
1.
REGEXP_REPLACE(PHONE_NUMBER,'(^.).*(.$)','\1_\2')



SY.
...
Рейтинг: 0 / 0
19.11.2017, 20:14
    #39555796
Fogel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
можно в качестве ненормального подхода и примитивно подойти, без регулярок:
Код: plsql
1.
substr(phone,1,1)||'_'||substr(phone,length(phone),1)
...
Рейтинг: 0 / 0
19.11.2017, 20:46
    #39555810
-1)
-1)
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
Fogel,

length не нужен.
...
Рейтинг: 0 / 0
19.11.2017, 20:47
    #39555811
Dasha151515
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
SY,

Спасибо большое!
...
Рейтинг: 0 / 0
19.11.2017, 20:50
    #39555812
Dasha151515
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
А подскажите еще, пожалуйста, как при помощи регулярных выражений вывести объект, который состоит только из одного слова, все символы которого, кроме первого – прописные английские буквы, а первый символ – заглавная английская буква. Ничего более содержаться не должно.
...
Рейтинг: 0 / 0
19.11.2017, 21:02
    #39555816
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
Ты Даша, это, доку-то почитай: [a-z], [A-Z]

SY.
...
Рейтинг: 0 / 0
19.11.2017, 21:28
    #39555822
Fogel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
Dasha151515все символы которого, кроме первого – прописные английские буквы, а первый символ – заглавная английская буква.
прописная = заглавная.
По твоему описанию, получается, что все буквы "БОЛЬШИЕ"
...
Рейтинг: 0 / 0
19.11.2017, 21:28
    #39555823
Fogel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
-1)Fogel,

length не нужен.
ес, оф кос
...
Рейтинг: 0 / 0
19.11.2017, 21:31
    #39555824
Dasha151515
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
Fogel,

Там нужно, чтобы только первая была большая, а все остальные маленькие.
...
Рейтинг: 0 / 0
19.11.2017, 21:45
    #39555828
Fogel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
Dasha151515Fogel,

Там нужно, чтобы только первая была большая, а все остальные маленькие.
Код: plsql
1.
upper(substr(object,1,1))||lower(substr(object,2))



Кому нужно на регулярке, тот пусть пишет на регулярке.
Viam supervadet vadens (с)
...
Рейтинг: 0 / 0
19.11.2017, 21:56
    #39555830
Dasha151515
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
А что можно изменить, чтобы выводилось только одно слово?
REGEXP_LIKE(last_name, '(^[A-Z])[a-z]', 'c')
...
Рейтинг: 0 / 0
19.11.2017, 22:30
    #39555837
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
Dasha151515А что можно изменить, чтобы выводилось только одно слово?
REGEXP_LIKE(last_name, '(^[A-Z])[a-z]', 'c')

Если ты о "вывести объект, который состоит только из одного слова, все символы которого, кроме первого – прописные английские буквы, а первый символ – заглавная английская буква", то ты на верном пути. ^[A-Z] это первый символ – заглавная английская буква. Дальше у тебя [a-z] прописная английская буква, но одна. Символ + это повторение предыдущего символа/группы 1 или более раз. Но это еще не значит что за прописными английскими буквами больше ничего нет. Для этого используем $ - конец строки. Получаем:

Код: plsql
1.
REGEXP_LIKE(last_name, '^[A-Z][a-z]+$')



Ну а case-sensitive matching ('c') - значение по-умолчанию и можно не указывать.

SY.
...
Рейтинг: 0 / 0
19.11.2017, 22:34
    #39555838
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
FogelКому нужно на регулярке, тот пусть пишет на регулярке.


А как насчет "состоит только из одного слова".

SY.
...
Рейтинг: 0 / 0
20.11.2017, 01:34
    #39555874
Fogel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
SYFogelКому нужно на регулярке, тот пусть пишет на регулярке.


А как насчет "состоит только из одного слова".

SY.
так я вообще иначе условие понял, но если продолжать этот бред, то
неизвестно, какие вообще там наборы, поэтому, если, например, предложение (слова через пробел и знаки препинания), то так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
case when
(substr(object,1,1) between 'A' and 'Z') and 
instr(object,' ') = 0 and 
instr(object,',') = 0 and
instr(object,'.') = 0 --ну и т. д.
then
upper(substr(object,1,1))||lower(substr(object,2))
end
...
Рейтинг: 0 / 0
20.11.2017, 01:55
    #39555884
initcap
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
Fogel
Код: plsql
1.
upper(substr(object,1,1))||lower(substr(object,2))

плохая из тебя сестра таланту.
...
Рейтинг: 0 / 0
30.11.2017, 21:37
    #39562227
Litwa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
SYЧитаем доку:

^ - начало строки
$ - конец строки
. - один любой символ
* - повторение предыдущего символа/группы 0 или более раз
() - группировка
\n - ссылка на группу n

Посему:

^. - первый символ строки
.$ - последний символ строки
.* - любой символ повторенный 0 или более раз

Соединяем и группируем то что нам нужно:

(^.).*(.$)

Ну и:

Код: plsql
1.
REGEXP_REPLACE(PHONE_NUMBER,'(^.).*(.$)','\1_\2')



SY.


не могли бы подсказать, пожалуйста, что значит последние символы "'\1_\2')" ? почему именно 1 и 2?
...
Рейтинг: 0 / 0
30.11.2017, 21:45
    #39562228
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
...
Рейтинг: 0 / 0
30.11.2017, 21:51
    #39562229
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
LitwaSY
Код: plsql
1.
REGEXP_REPLACE(PHONE_NUMBER,'(^.).*(.$)','\1_\2')


не могли бы подсказать, пожалуйста, что значит последние символы "'\1_\2')" ? почему именно 1 и 2?
Это т.н. "back reference", ссылка на найденное первой \1 и второй \2 скобками, т.е.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
1. найти в поле PHONE_NUMBER подстроку, состоящую из
- символа, следующего непосредственно за началом строки (обозначить "1")
- произвольного количества любых символов
- символа, предшествующего окончанию строки (обозначить "2")

2. Заменить в поле PHONE_NUMBER найденную на шаге 1 подстроку на строку, состоящую из:
- подстроки, обозначенной "1"
- знака подчеркивания
- подстроки, обозначенной "2"
Данный конкретный реплейс делает почти то же самое, что и
Код: plsql
1.
substr(PHONE_NUMBER,1,1)||'_'||substr(PHONE_NUMBER,-1,1)
...
Рейтинг: 0 / 0
30.11.2017, 21:58
    #39562230
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
Litwa,

Код: plsql
1.
2.
() - группировка
\n - ссылка на группу n



Соответственно Т.е. \1 есть ссылка на первую группу а \2 cоответственно на вторую. Шаблон у нас '(^.).*(.$)','\1_\2'. Значит \1 есть ссылка на (^.) что есть первый символ исходной строки a \2 есть ссылка на (.$) что есть последний символ исходной строки. В результате получаем первый символ исходной строки, подчеркивaние и последний символ исходной строки.

Sėkmės (судя по нику)

SY.
...
Рейтинг: 0 / 0
01.12.2017, 10:11
    #39562405
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
SY,

substr(PHONE_NUMBER,-1 ,1 )

ps
спасибо за разяснения
.....
stax
...
Рейтинг: 0 / 0
01.12.2017, 13:52
    #39562545
Litwa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
Stax, SY

Коллеги, спасибо!
...
Рейтинг: 0 / 0
01.12.2017, 13:52
    #39562546
Litwa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения
andrey_anonymous,

спасибо за подробный и оперативный ответ!
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Регулярные выражения / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]