2010-03-14 38 views

回答

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

我不知道爲什麼PHP需要/分隔符。 Perl,JS等有它們的唯一原因是它們允許正則表達式文字,而PHP不支持。

+8

這是因爲他們選擇使用單個字符串來提供修飾符和正則表達式模式。 ' 「/ [A-Z]/I」'。 – kennytm 2011-04-08 16:09:27

1

分隔符,在表達式的開始和結尾添加任何字符,在這種情況下,以及傳統的'/'字符preg_replace('/.*\.(.*)$/',"\\1",$imgfile);正則表達式不是很好,最好使用strrpos並使用substr()。

正則表達式很慢,請使用它。 $ extension = substr($ imgName,strrpos($ imgName,'。'));

+0

我知道但有這個問題; preg_replace()[function.preg-replace]:C:\ wamp \ www中的未知修飾符'$'.. – sml 2010-03-14 21:48:33

+0

是的,我的不好,也是編輯似乎破壞了表達式。最後最好在這種情況下使用substr()。你也可以使用preg_match。 – 2010-03-14 21:52:30

+0

您可以使用反引號將您的代碼轉義(請參閱http://stackoverflow.com/editing-help)。 $修正看起來不錯。 – 2010-03-14 21:57:32

15

你應該知道的4周主要的事情端口額日格圖案浸漬料:

  1. 添加分隔符(/):'pattern' => '/pattern/'

  2. 逃生分隔符如果它的一部分模式:'patt/ern' => '/patt\/ern/'
    通過以下方式以編程方式實現它:
    $ereg_pattern = '<div>.+</div>';
    $preg_pattern = '/' .addcslashes($ereg_pattern, '/') . '/';

  3. eregi(不區分大小寫匹配):'pattern' => '/pattern/i'所以,如果 您使用eregi函數的情況下insenstive匹配,只需添加 '我' 在新格局的結束('/模式/')。

  4. ASCII值:在額日格,如果在模式中使用數字,它是 假設你指的是一個字符的ASCII碼。但在 preg中,數字不被視爲ASCII值。因此,如果您的模式 在ereg表達式中包含ASCII值(例如:新行, 選項卡等),那麼將其轉換爲十六進制並以\ x爲前綴。
    Example: 9(tab) becomes \x9 or alternatively use \t.

希望這會有所幫助。

+0

有一個內置的轉義分隔符之間的正則表達式字符串http://php.net/manual/en/function.preg-quote.php – 2017-06-16 20:18:45