Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z wymysleniem pattern'u dla preg_replace, pytanie z zakresu Regular Expressions (Perl-Compatible)
s1w
post
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 28.04.2009

Ostrzeżenie: (0%)
-----


Witam. Chodzi o przetwarzanie wyrazen regularnych w php (opartych o perla). mianowicie:

(IMG:http://siwego.net/regexpsiw.jpg)

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 (IMG:http://forum.php.pl/style_emoticons/default/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
?>


(IMG:http://siwego.net/regexpsiw2.jpg)

thx

Ten post edytował s1w 28.04.2009, 20:42:50
Go to the top of the page
+Quote Post
Zyx
post
Post #2





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


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];
  }
}
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 05:19