Регулярнео выражение вытащить название файлов в url из текста

rtyug
На сайте с 13.05.2009
Offline
263
1455

туплю страшно... никак не получается.. в гугле найти не могу...

просто вытащить с url название файла получается...!!

(это примерно так: $path =~ /.*[/\\](.*)/; $file = $1;)

========

а вот есть много url в тексте, то не получается...

надо сделать что-то вродебы такое:

$text =~ s#<v:imagedata src="(.*?\/)(.*?)" (.*?)\/>#--><img src="$patch_pic_site$2" alt="" \/><!--#igs;

т.е. есть src

 <v:imagedata src=""

в src="" находится такой путь, например:

src="./sdfsdf/sdf/sd/sdfsdf.jpg"

(ТОЛЬКО путь может быть разный, но примерно такой)

как выбрать файл? и поставить его в $2 т.е. в $patch_pic_site$2 ??

Спалил тему: Pokerstars вывод WMZ, etc на VISA 0% или SWIFT + Конверт USD/GBP,etc (net profit $0,5 млрд) (https://minfin.com.ua/blogs/94589307/115366/) Monobank - 50₴ на счет при рег. тут (https://clck.ru/DLX4r) | Номер SIP АТС Москва 7(495) - 0Ꝑ, 8(800) - 800Ꝑ/0Ꝑ (http://goo.gl/XOrCSn)
Robin_Bad
На сайте с 24.12.2007
Offline
85
#1

rtyug, если я правильно вас понял, то у вас код в примере работает таким образом, что в $2 попадает не только имя файла ("sdfsdf.jpg"), а полный путь к нему ("./sdfsdf/sdf/sd/sdfsdf.jpg"), а нужно лишь имя файла?

Тогда нужно просто сделать алгоритм жадным, чтобы он искал не до первого символа "/", а до последнего:

$text =~ s#<v:imagedata src="(.*\/)(.*?)" (.*?)\/>#--><img src="$patch_pic_site$2" alt="" \/><!--#igs;

И ещё к вам вопрос: а в чём сакральный смысл захвата трёх частей текста, если вы используете только одну из них? Может, имеет смысл сделать так:

$text =~ s#<v:imagedata src=".*\/(.*?)" .*?\/>#--><img src="$patch_pic_site$1" alt="" \/><!--#igs;

rtyug
На сайте с 13.05.2009
Offline
263
#2

этот вариант

$text =~ s#<v:imagedata src=".*\/(.*?)" .*?\/>#--><img src="$patch_pic_site$1" alt="" \/><!--#igs;

срубает текст, всю статью рубает...

это потому что "жадные" квантификаторы (.*) они рубают все, потмоу что тут стоит в конце s (igs)

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

<v:imagedata 

src
alt

без s такое обрабатыватеся не будет....

но как в данном случае файлик взять, что-то не могу представить...

======

хотя, может как-то "забить" на это... руками менять...

у меня кстате, не получается писать рег.выр. в последнее время...

Robin_Bad
На сайте с 24.12.2007
Offline
85
#3

rtyug, да, что-то я сам с жадностью переборщил :)

$text =~ s#<v:imagedata src="(.*?\/)([a-z0-9\.]+)" (.*?)\/>#--><img src="$patch_pic_site$2" alt="" \/><!--#igs;

прокатит? на вашем примере работает :)

rtyug
На сайте с 13.05.2009
Offline
263
#4

спасибо, подошло...

rtyug
На сайте с 13.05.2009
Offline
263
#5

подскажите, почему такое рег. выр.


$text =~ s#<img width=(.*?) height=(.*?) src="(.*?\/)([a-z0-9\.]+)" (.*?)\/>#<img src="$patch_pic_site$rand_img-$4" alt="" \/>#igs;

не хочет работать для такого участка


<img width=236 height=149
src="./RGDMETMP1.files/image010.jpg" align=left hspace=12 v:shapes="_x0000_s1049">

в тексте?

я уже нормально з###ался, мне ради интереса уже интерсно :)

awmaster08
На сайте с 22.02.2008
Offline
155
#6

Я в регулярках страшно туплю, методом тыка мне помогает этот конструктор: http://www.pcre.ru/eval/

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий