perl: регулярные выражения: взять путь
Модератор: Модераторы разделов
-
agbr
- Сообщения: 486
- ОС: openSUSE 10.2
perl: регулярные выражения: взять путь
есть переменная содержащая типа /blah/blah/blah/blah/file.ext, надо из неё сделать просто /blah/blah/blah/blah, но как можно короче, и не создавая дополнительных переменных
вопрос конечно глупый, но сам жудко туплю
вопрос конечно глупый, но сам жудко туплю
jabber: agbr@jabber.ru
против проприетарного ПО в GNU/Linux
против проприетарного ПО в GNU/Linux
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: perl: регулярные выражения: взять путь
$str =~ s/\/[^\/]*$//;
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: perl: регулярные выражения: взять путь
Лучше s|/[^/]*$|| -- чисто с точки зрения читабельности.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
Zeus
- Сообщения: 694
Re: perl: регулярные выражения: взять путь
Умиляет меня этот язык 
s|/[^/]*$||
более читабельно, чем
$str =~ s/\/[^\/]*$//;
:lol:
s|/[^/]*$||
более читабельно, чем
$str =~ s/\/[^\/]*$//;
:lol:
-
Jan2ary
- Бывший модератор
- Сообщения: 630
- Статус: Тщедушный очкарик
Re: perl: регулярные выражения: взять путь
Насколько я знаю язык, и насколько я понял t.t, имелось в виду, что пайпы легче выделяются из обилия слешей, чем сами слеши, поэтому слеши команды s были заменени на пайпы, а экранировать слеши пути больше не надо.
$str =~ s|/[^/]*$||;
$str =~ s|/[^/]*$||;
Не шалю, никого не трогаю, починяю примус...
-
Zeus
- Сообщения: 694
Re: perl: регулярные выражения: взять путь
Да я просто про сам язык говорю 
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: perl: регулярные выражения: взять путь
Весьма правильно понял. Вообще, насколько я помню, символы-разделители в выражении s/// могут быть вообще чуть ли не любыми; соответственно лучше использовать такие символы, которых нет в искомой строке, именно чтобы избежать излишних экранировок.(Jan2ary @ May 31 2006, в 10:02) писал(а):Насколько я знаю язык, и насколько я понял t.t, имелось в виду, что пайпы легче выделяются из обилия слешей, чем сами слеши, поэтому слеши команды s были заменени на пайпы, а экранировать слеши пути больше не надо.
$str =~ s|/[^/]*$||;
А вы почитайте чего-нибудь о регулярных выражениях; хотя бы самые азы. То, что здесь написано, к примеру, сразу станет понятнее. Да и вообще в жизни пригодится; регулярные выражения (в несколько разной форме, но по тому же принципу) -- это не только perl, но и, к примеру, sed, и grep, и rename, и т.д.(Zeus @ May 31 2006, в 09:00) писал(а):Умиляет меня этот язык
s|/[^/]*$||
более читабельно, чем
$str =~ s/\/[^\/]*$//;
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
Zeus
- Сообщения: 694
Re: perl: регулярные выражения: взять путь
Не беспокойтесь, я в курсе что такое регулярные выражения, хоть их практически и не использую.
Это мощная штука, я не спорю, просто вид у perl'ных программ весьма специфический: примерно как арабская вязь
Это мощная штука, я не спорю, просто вид у perl'ных программ весьма специфический: примерно как арабская вязь
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: perl: регулярные выражения: взять путь
Ну, по перлу на этот предмет не проходился только ленивый. Но это не мешает при должном умении писать на нём вполне читабельные программы. Равно как при желании повыпендриваться не менее арабскую вязь можно написать, скажем, на тех же сях.(Zeus @ May 31 2006, в 12:18) писал(а):Не беспокойтесь, я в курсе что такое регулярные выражения, хоть их практически и не использую.
Это мощная штука, я не спорю, просто вид у perl'ных программ весьма специфический: примерно как арабская вязь
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
Dr.Linux
- Сообщения: 272
- Статус: Cтудент
- ОС: Mandriva Linux 2007 Discovery
Re: perl: регулярные выражения: взять путь
А что лучше почитать по регулярным выражениям, подскажите пожалуйста? Раз уж разговор зашел о регулярных выражениях. Без них ни один скрипт не напишешь.А вы почитайте чего-нибудь о регулярных выражениях; хотя бы самые азы. То, что здесь написано, к примеру, сразу станет понятнее. Да и вообще в жизни пригодится; регулярные выражения (в несколько разной форме, но по тому же принципу) -- это не только perl, но и, к примеру, sed, и grep, и rename, и т.д.
Хау, я сказал Enter.
"Для теории нужны знания, для практики, сверх того, и умение".
А. Н. Крылов
"Для теории нужны знания, для практики, сверх того, и умение".
А. Н. Крылов
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
-
Dr.Linux
- Сообщения: 272
- Статус: Cтудент
- ОС: Mandriva Linux 2007 Discovery
Re: perl: регулярные выражения: взять путь
2 elide
Я не по perl спрашивал, а вообще по регулярным выражениям. Чтобы скрипты писать не только на perl, но и на python и на bash. А так спасибо, посмотрю.
Я не по perl спрашивал, а вообще по регулярным выражениям. Чтобы скрипты писать не только на perl, но и на python и на bash. А так спасибо, посмотрю.
Хау, я сказал Enter.
"Для теории нужны знания, для практики, сверх того, и умение".
А. Н. Крылов
"Для теории нужны знания, для практики, сверх того, и умение".
А. Н. Крылов
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: perl: регулярные выражения: взять путь
А как раз перловые много где используются. А так -- куда надо, туда и копать: man sed, man egrep и т.д.(Dr.Linux @ Jun 1 2006, в 16:01) писал(а):2 elide
Я не по perl спрашивал, а вообще по регулярным выражениям.
Вообще, была на perl.ru хорошая статья развёрнутая об использовании регекспов; вот после его кончины всё нигде её найти не могу.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: perl: регулярные выражения: взять путь
перл, как я понимаю, является законодателем мод в регулярных выражениях. К тому же, имхо, в нём они самые "нормальные", не то что в этих grep-ах и sed-ах, придумали же, скобки ескейпить (я уже про vim не говорю
Кстати лучше читать не man perlre а сначала man perl и там смотреть ссылки. Вроде perlretut например.
-
madskull
- Сообщения: 1019
- Статус: Экс-металлюга
Re: perl: регулярные выражения: взять путь
Вообще-то, grep и, возможно, sed появились раньше перла. Но да, pcre помощнее будет.
grep -P или pcregrep, psed
ArchLinux / IceWM
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: perl: регулярные выражения: взять путь
grep -P или pcregrep, psed
Спасибо, я в принципе уже привык к обычным, но буду знать.
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: perl: регулярные выражения: взять путь
Тут и от меня спасибо. В дебиановском грепе -P не работает, так что такая штука может пригодиться.(madskull @ Jun 3 2006, в 00:29) писал(а):pcregrep
Это тоже да, т.к. перловые, насколько я знаю, самые развёрнутые и следовательно самые сложные.(v04bvs @ Jun 2 2006, в 22:04) писал(а):если знать perl-овские регэкспы, то для остального достаточно просмотреть документацию и "найти 10 отличий"
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
madskull
- Сообщения: 1019
- Статус: Экс-металлюга
Re: perl: регулярные выражения: взять путь
Э-э-э, я иногда просто не понимаю дебианщиков.
Конечно, стабильность там и всё такое... Но эта опция была добавлена аж в 2000 году...
Может, просто grep так собран?
ArchLinux / IceWM
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: perl: регулярные выражения: взять путь
Нет, там такая штука, что для -P надо libpcre, она сейчас в /usr/lib, а grep в /bin и нужен для системных скриптов. В общем для -P нужно переложить libpcre в /lib, а этого они почему то не хотят делать. Более подробно можно помотреть в баглистах для grep.
-
madskull
- Сообщения: 1019
- Статус: Экс-металлюга
Re: perl: регулярные выражения: взять путь
В общем, после написания поста я подумал про то же. Не хотят цепляться к библиотеке, которая не является "базовой".
ArchLinux / IceWM
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: perl: регулярные выражения: взять путь
Именно так. А пересобирать лень, поэтому мне и хорошо, что есть отдельный греп с перловкой.(madskull @ Jun 3 2006, в 21:32) писал(а):В общем, после написания поста я подумал про то же. Не хотят цепляться к библиотеке, которая не является "базовой".
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж