Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z wymysleniem pattern'u dla preg_replace
Forum PHP.pl > Forum > PHP
s1w
Witam. Chodzi o przetwarzanie wyrazen regularnych w php (opartych o perla). mianowicie:



probowalem setek patterns ale ciagle jestem w klopie

dla #1 nie chodza:
Kod
'/\..+$/'
   '/\..+?$/'
   '/\..+?(?!\.)$/'
             \
              tak to jest wyprzedzajacy znak, tylko nie wiem czy
              logika tego nie odwrocila sie poprzez $


dla #2
Kod
$replace = '/\.[\w\W]+$/';
      $with = '';
  
   preg_replace($replace,$with,$str);

(narazie jeszcze bez zwracania wartosci poprawnych -alphanumerycznych)
a i tak zle

inne:
Kod
'/\.[\w\W^\.]+$/'    
   '/\.[\w\W^\.]+?$/'    
   '/\.[\w\W[^\.]]+?$/'        
   '/\.[\w[\W[^\.]]]+?$/'
   '/\.[\w\W&&[^\.]]]+?$/'  //&& chodzace w javie, ale raczej nie w php
              
   '/\.(?:\w|\W)+$/'        //lub nawet bez []
   '/\.(?:\w?|\W?)+$/'


pierwszy zamysl ze zwracaniem:
Kod
'/\.[(\w)\W^\.]+?$/'  
   '/\.(?:\(w?)|\W?)+$/'
  
   $replacer = '\.$1';


czy mialby ktokolwiek jakis pomysl jak to rozwiazac?

pozdrawiam
michal

rozwiazalem smile.gif nie wiedzialem ze mozna zagniezdzac funkcje w parametrach funkcji! wczesniej obilo mi sie w jawie odpowiedniku ale bylem blednie przekonany ze tu to niemozliwe.

Kod
<?php
$replace = array('/[\[\{]/', '/[\]\}]/',                //zamienic nawiasy [] {} na ()
                 '/(.*)\.(.*)$/e',                      //sformatowac rozszerzenie
                 '/[^\w\s\(\)\-`\.,;\+=#&!]|'.          //zezwolic w nazwie pliku na _ -() `,.;+=!&#
                 '^[\s\.,;]*[!&\-#]+[\s,;!&\-#]*/',     //sformatowac zjadliwy poczatek
                 '/^[\s\.,;]+|\s+(?=\s.)/');            //przyciac i skrocic  wielokrotne spacje
$with = array('(',')',"trim('$1').'.'.preg_replace('~[\W]~','','$2')",'_','');

printt ('file|'.preg_replace($replace,$with,$str).'|'); //wlasna do wyrzucania wynikow na ekran
?>




thx
Zyx
A musisz to koniecznie na wyrażeniach regularnych robić? Bo kombinujesz, jak koń pod górę, a tymczasem:

#1:

Kod
$text = substr($text, 0, ( ($id = strrpos('.', $text) ) !== false ? $id, strlen($text));


#2:

Kod
$buffer = '';
for($i = strlen($text) - 1; $i >= 0; $i--)
{
  if($text[$i] == '.')
  {
    $buffer = substr($text, 0, $i).strrev($buffer);
    break;
  }
  elseif(ctype_alnum($text[$i]))
  {
    $buffer .= $text[$i];
  }
}
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.