Регулярные выражения?

Royal Flash

-=MaestrO=-
Регулярные выражения?

Каким образом можно отрезать окончание строки, например: $str='odin!dva!tri!', чтобы получился $str = 'odin!dva!' ?
Логика ясна:

нужно взять все от последнего вхождения "!" до предпоследнего вхождения "!", не включая предпоследний "!" или, если предпоследнего вхождения нет ($str = 'odin!') то всю строку, и заменить на ''.

Вот только не ясно, как это записать :( Подскажите, плз, синтаксис задания этого условия (регулярное выражение) для preg_match().
 

DiTHER

bang bang
лениво что ли?

PHP:
    1 <?php
    2
    3 $str[] = 'odin!dva!tri!';
    4 $str[] = 'odin!dva!';
    5 $str[] = 'odin!';
    6
    7 foreach($str as $s)
    8 {
    9     echo 'Was: ' . $s . "\n";
   10     $tmp = preg_replace("/^(.*\!)(.*?)\!$/","$1",$s);
   11     echo 'New: ';
   12     echo ($tmp != $s) ? $tmp : "<blank>";
   13     echo "\n-------\n";
   14 }
   15
   16 ?>
Код:
[root@BSN root]# php t.php
Was: odin!dva!tri!
New: odin!dva!
-------
Was: odin!dva!
New: odin!
-------
Was: odin!
New: <blank>
 

Royal Flash

-=MaestrO=-
Спасиба, работает :) только еще не совсем так, как нужно. Точнее, кода $str = 'odin!' он не вырезается вообще.
Да и я совсем не понял, смысла рег выражения, точнее что такое "$1"?

-~{}~ 23.09.05 04:30:

$tmp = preg_replace("/^(.*\!)(.*?)\!$|(.*\!)/","$1",$s);
Вот так уже все работает так как нужно.
 
Сверху