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

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

Посему:

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

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

(^.).*(.$)

Ну и:

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



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

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

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

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

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

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

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



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


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

SY.
...
Рейтинг: 0 / 0
Регулярные выражения
    #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
Регулярные выражения
    #39555884
initcap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fogel
Код: plsql
1.
upper(substr(object,1,1))||lower(substr(object,2))

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

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

Посему:

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

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

(^.).*(.$)

Ну и:

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



SY.


не могли бы подсказать, пожалуйста, что значит последние символы "'\1_\2')" ? почему именно 1 и 2?
...
Рейтинг: 0 / 0
Регулярные выражения
    #39562228
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Регулярные выражения
    #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
Регулярные выражения
    #39562230
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Litwa,

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



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

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

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

substr(PHONE_NUMBER,-1 ,1 )

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

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

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


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