Отрезать часть предложения

Статус
В этой теме нельзя размещать новые ответы.

serjinio

Гуру форума
Регистрация
10 Май 2007
Сообщения
439
Реакции
50
Помогите с регуляркой надо отрезать кусок текста (в конце)

fff_kk-12.jpg
hhhhhhhh_125X300.png
iss_art01_.jpg
iss_art01-.jpg
fff_hhhh-jjjj-777.gif
fff-hhhh-jjjj_777.gif

на выходе

fff_kk
hhhhhhhh
iss_art01
iss_art01
fff_hhhh-jjjj
fff-hhhh-jjjj

те отрезать всё что начинается с -_(может быть цифра)(+?\.(jpe?g|gif|png))
 
PHP:
<?php
$txt="fff_kk-12.jpg
hhhhhhhh_125X300.png
iss_art01_.jpg
iss_art01-.jpg
fff_hhhh-jjjj-777.gif
fff-hhhh-jjjj_777.gif";
$out=preg_replace("![\-_]\d*\.(jpe?g|gif|png)!i","",$txt);
print_r($out);
?>
Только вот, hhhhhhhh_125X300.png - не вписывается в общий паттерн никак. Ибо, если вписать, могут попадать и другие строки, в которых не надо вырезать ничего.
Вот, на всякий случай, паттерн, захватывающий и эту ситуацию:
PHP:
$out=preg_replace("![\-_]\d*\w?\d*\.(jpe?g|gif|png)!i","",$txt);
 
По мотивам Virtual
PHP:
$txt="fff_kk-12.jpg
hhhhhhhh_125X300.png
iss_art01_.jpg
iss_art01-.jpg
fff_hhhh-jjjj-777.gif
fff-hhhh-jjjj_777.gif";
$out = preg_replace("/(.*)((\-|_).*?(jpe?g|gif|png))/i", "$1", $txt);
print_r($out);
 
PHP:
$txt="fff_kk-12.jpg 
hhhhhhhh_125X300.png 
iss_art01_.jpg 
iss_art01-.jpg 
fff_hhhh-jjjj-777.gif 
fff-hhhh-jjjj_777.gif"; 
if (preg_match("/(.+?)[\-|_]([^\-|_]*)\.[a-zA-Z0-9]{3,4}/i",  $txt, $rg)
    $out = $rg[1];
print $out;
 
Указано ведь, конкретные расширения. Т.е. человеку явно нужны картинки. :) И, в конструкции вида [\-|_] этот символ "|" лишний, и не является логическим ИЛИ, как в конструкции с круглыми скобками...
 
Ребята,спасибо выручили всё чётко работает ,но встретился ещё гемор

PHP:
dddddddd_09_1280x1024.jpg
AFbb_Adcd-Shhhh_77_1600x1200.jpg

патерн их пропускает

AFbb_Adcd-Shhhh_77
dddddddd_09


помогите подкорректировать. Заранее спасибо
 
serjinio, попробуйте мой вариант. Он немного универсальнее чем у Virtual'a
 
К сожалению он тоже пропускает то, что я написал выше :(
 
Так а он и должен пропускать. Точнее, не пропускать, а давать на выходе
AFbb_Adcd-Shhhh_77
dddddddd_09
если исходные данные были
dddddddd_09_1280x1024.jpg
AFbb_Adcd-Shhhh_77_1600x1200.jpg
Т.е. это не паттерн их пропускает, это еще один паттерн, который надо запихнуть в регулярку. ;)

Если же надо убирать и _77 а так же _09, то
PHP:
<?php
$txt="fff_kk-12.jpg
hhhhhhhh_125X300.png
iss_art01.jpg
iss_art01-.jpg
iss_art01_.jpg
fff_hhhh-jjjj-777.gif
fff-hhhh-jjjj_777.gif
dddddddd_09_1280x1024.jpg
AFbb_Adcd-Shhhh_77_1600x1200.jpg
";
$out = preg_replace("/[\-_]*?(([\-_]+[\d]+)+[\w]?[\d]*?[\-_]?)?\.(jpe?g|gif|png)([\r\n]|^|$)/i", "", $txt); 
print_r($out);
?>

Вариант Alix, отрежет от iss_art01.jpg все, кроме "iss", что не входит в изначальное условие..
 
отлично ,то что надо applause:ay:
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху