2010-03-14 22 views

Respuesta

11
preg_replace("/.*\.(.*)$/", "\\1", "foo.jpg") 

no sé qué PHP requiere / los delimitadores. La única razón por la que Perl, JS, etc. los tienen es que permiten literales de expresiones regulares, lo que PHP no hace.

+8

Es porque optan por utilizar una sola cadena para proporcionar el modificador y el patrón de expresión regular. '"/[a-z]/i "'. – kennytm

1

delimitadores, agregue cualquier char al principio y al final de la expresión, en este caso, y por tradición, el carácter '/' preg_replace('/.*\.(.*)$/',"\\1",$imgfile); La expresión regular no es muy buena, mejor usar strrpos y tomar substr().

Regex es lento, úselo. $ extension = substr ($ imgName, strrpos ($ imgName, '.'));

+0

Lo sé pero tengo este problema; preg_replace() [function.preg-replace]: Modificador desconocido '$' en C: \ wamp \ www .. – sml

+0

Sí, es malo, también la edición parece destruir la expresión. Al final es mejor usar un substr() en este caso. También puedes usar preg_match. –

+0

Puede escapar de su código con backticks (vea http://stackoverflow.com/editing-help). La corrección de $ se ve bien. –

15

Debe saber 4 cosas principales a los patrones Ereg puerto a preg:

  1. Añadir delimitadores (/): 'pattern' => '/pattern/'

  2. Escapar delimitador si se trata de una parte de el patrón: 'patt/ern' => '/patt\/ern/'
    Lograrlo programáticamente de la siguiente manera:
    $ereg_pattern = '<div>.+</div>';
    $preg_pattern = '/' .addcslashes($ereg_pattern, '/') . '/';

  3. eregi (entre mayúsculas y minúsculas juego): 'pattern' => '/pattern/i' lo tanto, si está utilizando la función eregi para el caso de coincidencia de insenstive, sólo tiene que añadir 'i' en el final del nuevo patrón ('/ patrón/').

  4. valores ASCII: En ereg, si se utiliza el número en el patrón, es supone que se está refiriendo a la ASCII de un carácter. Pero en preg, el número no se trata como valor ASCII. Por lo tanto, si su patrón contiene un valor ASCII en la expresión ereg (por ejemplo: nueva línea, pestañas, etc.), conviértalo a hexadecimal y póngalo como prefijo \ x.
    Example: 9(tab) becomes \x9 or alternatively use \t.

Esperamos que esto ayude.

+0

Hay un built-in para escapar de una cadena de expresiones regulares entre delimitadores http://php.net/manual/en/function.preg-quote.php –

Cuestiones relacionadas