Forum Webscript.Ru

Программирование => Perl => Тема начата: glebushka от 10 Апреля 2002, 23:27:15

Название: Регулярные выражения, удаление после определённого символа...
Отправлено: glebushka от 10 Апреля 2002, 23:27:15
Плиз, помогите!
Суть траблззз:
есть строка, её запихиваем в переменную, после чего
1) необходимо удалить определённый символ, ну например "/", и всё, что после него.
2) надо из всей строки оставить только то, что находится между этими символами.
3) надо удалить всё, что следует 2 символ и всё, что до него...
Плиз, напишите примерчики, очень надо, лучше с комментариями:), хотя я думаю на примере и так разберусь.
ЗЫ. Не пишите что надо учить регулярные выражения, знаю, что надо, ну не понятливый я...
Помогите, а?
Название: Регулярные выражения, удаление после определённого символа...
Отправлено: glebushka от 10 Апреля 2002, 23:28:56
Мда, сам не понял что написал:) в третьем пункте читай:
надо удалить всё, 2 символ и всё, что до него...
Название: Регулярные выражения, удаление после определённого символа...
Отправлено: Chs от 11 Апреля 2002, 00:33:59
perldoc perlre  :))

Цитировать
1) необходимо удалить определённый символ, ну например "/", и всё, что после него.

s|(.*\\/)(.*?)|$1|
Цитировать

2) надо из всей строки оставить только то, что находится между этими символами.

s|.*\\/(.*?)\\/.*?|$1|
Название: Спасибо!
Отправлено: glebushka от 11 Апреля 2002, 01:19:45
Chs ты прям добрый гений ща пойду, попытаюсь сделать как ты написал:).
Название: Регулярные выражения, удаление после определённого символа...
Отправлено: Green Kakadu от 11 Апреля 2002, 03:46:57
Цитировать
s|(.*\\/)(.*?)|$1|

Chs, типа неправильно (.* там сожрала все по максимуму), а так лучше:
1. s/\\/.*//;

2. оставить то что между /../
s/[^\\/]*\\/([^\\/]*)\\/.*/$1/;
А если возможен вариант, что может такого и не оказаться, то
стоит просто вынести $1

if ($text=~m/\\/([^\\/]*)\\//){$res=$1;}
else {$res=\'\';}


Цитировать
3 надо удалить всё, 2 символ и всё, что до него...

а все равно непонятно, что ты хочешь, ты лучше кидай пример выражения до и после - легче будет.
Если просто надо удалить первых два символа, то так:
s/^..//;
;) только ты наверняка имел ввиду что-то другое
Название: Регулярные выражения, удаление после определённого символа...
Отправлено: Chs от 11 Апреля 2002, 09:28:07
Цитировать
Chs, типа неправильно (.* там сожрала все по максимуму), а так лучше:

Я последнее вхождение "/" брал. Почему-то показалось, что так надо....
Из этих условий - все правильно.:))
Название: Регулярные выражения, удаление после определённого символа...
Отправлено: glebushka от 11 Апреля 2002, 10:42:17
Цитировать
только ты наверняка имел ввиду что-то другое

Пример:
Есть строка
выапвраыыв/dsfdghdfffdfdgffdfd/то, что надо оставить
Название: Регулярные выражения, удаление после определённого символа...
Отправлено: Chs от 11 Апреля 2002, 11:13:48
s|.*\\/(.*?)|$1| :))
Название: Регулярные выражения, удаление после определённого символа...
Отправлено: Green Kakadu от 12 Апреля 2002, 02:37:16
Цитировать
Есть строка
выапвраыыв/dsfdghdfffdfdgffdfd/то, что надо оставить

или так:
s/.*\\///;
:)
2Chs у меня твой первый вариант ни в какую не хочет работать :( в $1 он сохраняет все выражение и результат замена сам на себя, правда, признаюсь ;) мой perl иногда подглючивает, а переставлять лень..