Простой вопрос по RegExp (Oracle10 или Unix)

0000

Как получить кусок строки после напр. точки?
Хотелось бы одной командой, как напр. regexp ('bla.bla2', '\w+') -> bla

pitrik2

\.(.*)$ -> $1

salora

Хех, здесь вопрос: после какой по счёту точки?
А так, если после первой:

<как-то выводятся строки> | grep -P 's/^[^.]*?\.\(.*\)$/$1/g'

0000

Прошу прощения, видимо я неверно понял документацию к Оракл и его стандарт регулярных выражений отличается от Unix Потому наверно не работает.
P.S. Надо для Оракл. Точка будет одна.

pitrik2

<как-то выводятся строки> | grep -P 's/^[^.]*?\.\(.*\)$/$1/g'
что означает вопросик тут?

pitrik2

в оракле тоже самое
там есть ффункция регексп реплейс

ermsoft

Нежадность, очевидно
Другое дело, что он тут не нужен, с ним и без него одинаково получится.
А ещё тут с эскейпингом, кажется, косяки. Хотя у меня не получилось проверить:
 
grep: The -P option is not supported

pitrik2

SELECT REGEXP_REPLACE('foo.bar', '\.(.*)$', '\1') FROM dual
нету 10 под рукой
но должн быть как-то так
отличия от юникса: вместо $1 нада \1

pitrik2

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

0000

Из приведенного в Оракл ничего не работает - пробую regexp_substr

ermsoft

тут еще такой момент: опции жадности есть токо в крутых реализациях регулярных
чаще всего этого нету, в оракле, например, тоже нету
Угу.
Хотя в данном конкретном случае -
       -P, --perl-regexp
Interpret PATTERN as a Perl regular expression.

Хотя и не работает почему-то.

pitrik2

Из приведенного в Оракл ничего не работает - пробую regexp_substr
субстр - это частный случай реплейса
мне лично с реплейсом как-то проще и не нужно помнить синтаксис 2 команд вместо одной

0000

И как будет на Replace?

pitrik2

ты пропустил что ли?

0000

Да, пардон не заметил
Там немного не то получается - там просто точка удаляется: foo.bar -> foobar, а надо bar.
P.S. Сорри что спрашиваю, regexp вещь полезная, но времени ее учить пока нет

pitrik2

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

SELECT REGEXP_REPLACE('foo.bar', '^.*\.(.*)$', '\1') FROM dual

поясняю для тебя:
^ - берем начало строки
.* - откидываем все подряд
\. - до точки, ее тоже откидываем
(.*) - берем все подряд, все что в скобках будет запомнено в \число
$ - так берем до конца строки
\1 - заменить все-все-все на то что в первой скобке

0000

Ура, псиб большое
Оставить комментарий
Имя или ник:
Комментарий: