preg_replace için ereg_replace?

4 Cevap php

Nasıl dönüştürebilirsiniz

ereg_replace(".*\.(.*)$","\\1",$imgfile);

karşı

preg_replace... ?

?

Onunla sorun yaşıyorum?

4 Cevap

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

PHP / ayraçları gerektirir neden bilmiyorum. Vb Perl, JS, onlara sahip tek nedeni PHP değil regex değişmezleri, sağlamasıdır.

You should know 4 main things to port ereg patterns to preg:

  1. Add delimiters (/): 'pattern' => '/pattern/'

  2. Escape delimiter if it is a part of the pattern: 'patt/ern' => '/patt\/ern/'
    Achieve it programmatically in following way:
    $ereg_pattern = '<div>.+</div>';
    $preg_pattern = '/' .addcslashes($ereg_pattern, '/') . '/';

  3. eregi(case-insensitive matching): 'pattern' => '/pattern/i' So, if you are using eregi function for case insenstive matching, just add 'i' in the end of new pattern('/pattern/').

  4. ASCII values: In ereg, if you use number in the pattern, it is assumed that you are referring to the ASCII of a character. But in preg, number is not treated as ASCII value. So, if your pattern contain ASCII value in the ereg expression(for example: new line, tabs etc) then convert it to hexadecimal and prefix it with \x.
    Example: 9(tab) becomes \x9 or alternatively use \t.

Bu yardımcı olacağını umuyoruz.

ayraçlar, bu durumda, ve gelenek ile, başından ve ifade sonuna herhangi bir karakter eklemek, '/' karakteri preg_replace('/.*\.(.*)$/',"\\1",$imgfile); regex) strrpos kullanın ve (substr almak, daha çok iyi değil.

Regex is slow, use this. $extension=substr($imgName,strrpos($imgName,'.'));

'$' Ereg_replace bir 'end marker' (), ama bu aynı 'end marker' () preg_replace tanınan değildir.

'Uç işareti' olarak, ben "* $ merhaba." "Merhaba abc dünyayı" bir dize maç olmaz demek ama "merhaba abc" maç olacaktır.

Öte yandan ". * Merhaba $" "merhaba abc dünya" maç İSTİYORUM.

Ben preg_replace bu 'end marker' davranış () çoğaltmak için nasıl emin değilim. Geri kılavuza şimdi!